Zum Inhalt springen

Blog-Beitragsarchiv erstellen

Jetzt, wo du ein paar Blog-Beiträge hast, die du verlinken kannst, ist es Zeit, die Blog-Seite so einzurichten, dass automatisch eine Liste davon erstellt wird!

Mach dich bereit, …

  • mit import.meta.glob() auf die Daten aller deiner Beiträge gleichzeitig zuzugreifen
  • eine dynamisch generierte Liste der Beiträge auf deiner Blog-Seite anzuzeigen
  • den Code zu überarbeiten, um für jedes Listenelement eine <BlogPost />-Komponente zu verwenden
  1. Füge den folgenden Code zu blog.astro hinzu, um Infos zu all deinen Markdown-Dateien zurückzugeben. import.meta.glob() gibt ein Array von Objekten zurück, wobei jedes einem Blogbeitrag entspricht.

    src/pages/blog.astro
    ---
    import BaseLayout from '../layouts/BaseLayout.astro'
    const allPosts = Object.values(import.meta.glob('./posts/*.md', { eager: true }));
    const pageTitle = "Mein Astro-Lernblog";
    ---
    <BaseLayout pageTitle={pageTitle}>
    <p>Hier werde ich über meine Erfahrungen beim Lernen von Astro berichten.</p>
    <ul>
    <li><a href="/posts/post-1/">Beitrag 1</a></li>
    <li><a href="/posts/post-2/">Beitrag 2</a></li>
    <li><a href="/posts/post-3/">Beitrag 3</a></li>
    </ul>
    </BaseLayout>
  2. Um die ganze Liste der Beiträge dynamisch zu erstellen, indem du die Beitragstitel und URLs nutzt, ersetze deine einzelnen <li>-Tags durch den folgenden Astro-Code:

    src/pages/blog.astro
    ---
    import BaseLayout from '../layouts/BaseLayout.astro'
    const allPosts = Object.values(import.meta.glob('./posts/*.md', { eager: true }));
    const pageTitle = "Mein Astro-Lernblog";
    ---
    <BaseLayout pageTitle={pageTitle}>
    <p>Hier werde ich über meine Erfahrungen beim Lernen von Astro berichten.</p>
    <ul>
    <li><a href="/posts/post-1/">Beitrag 1</a></li>
    <li><a href="/posts/post-2/">Beitrag 2</a></li>
    <li><a href="/posts/post-3/">Beitrag 3</a></li>
    {allPosts.map((post: any) => <li><a href={post.url}>{post.frontmatter.title}</a></li>)}
    </ul>
    </BaseLayout>

    Deine ganze Liste von Blog-Beiträgen wird jetzt dynamisch mit der integrierten TypeScript-Unterstützung von Astro generiert, indem das von import.meta.glob() zurückgegebene Array zugeordnet wird.

  3. Füge einen neuen Blogbeitrag hinzu, indem du eine neue Datei post-4.md in src/pages/posts/ erstellst und einige Markdown-Inhalte hinzufügst. Achte darauf, dass du mindestens die unten verwendeten Frontmatter-Eigenschaften einfügst.

    ---
    layout: ../../layouts/MarkdownPostLayout.astro
    title: Mein vierter Blogbeitrag
    author: Astro-Lernender
    description: "Dieser Beitrag wird eigenständig angezeigt!"
    image:
    url: "https://docs.astro.build/default-og-image.png"
    alt: "Das Wort „astro“ vor einer Illustration von Planeten und Sternen."
    pubDate: 2022-08-08
    tags: ["astro", "erfolge"]
    ---
    Dieser Beitrag sollte zusammen mit meinen anderen Blogbeiträgen angezeigt werden, weil `import.meta.glob()` eine Liste aller meiner Beiträge zurückgibt, um meine Liste zu erstellen.
  4. Schau dir deine Blog-Seite in der Browser-Vorschau unter http://localhost:4321/blog an und such nach einer aktualisierten Liste mit vier Einträgen, darunter dein neuer Blogbeitrag!

Versuch selbst, alle notwendigen Änderungen an deinem Astro-Projekt vorzunehmen, damit du stattdessen den folgenden Code verwenden kannst, um deine Liste mit Blogbeiträgen zu erstellen:

src/pages/blog.astro
<ul>
{allPosts.map((post: any) => <li><a href={post.url}>{post.frontmatter.title}</a></li>)}
{allPosts.map((post: any) => <BlogPost url={post.url} title={post.frontmatter.title} />)}
</ul>
Erweitere, um die Schritte anzuzeigen
  1. Erstelle eine neue Komponente in src/components/.

    Zeige den Dateinamen an
    BlogPost.astro
  2. Schreib die Codezeile in deine Komponente, damit sie einen title und eine url als Astro.props empfangen kann.

    Code anzeigen
    src/components/BlogPost.astro
    ---
    const { title, url } = Astro.props;
    ---
  3. Füge die Vorlage hinzu, mit der du jedes Element in deiner Blogpost-Liste erstellst.

    Code anzeigen
    src/components/BlogPost.astro
    <li><a href={url}>{title}</a></li>
  4. Importiere die neue Komponente in deine Blog-Seite.

    Code anzeigen
    src/pages/blog.astro
    ---
    import BaseLayout from '../layouts/BaseLayout.astro';
    import BlogPost from '../components/BlogPost.astro';
    const allPosts = Object.values(import.meta.glob('../pages/posts/*.md', { eager: true }));
    const pageTitle = "Mein Astro-Lernblog";
    ---
  5. Überprüfe es selbst: Schau dir den fertigen Komponentencode an.

    Code anzeigen
    src/components/BlogPost.astro
    ---
    const { title, url } = Astro.props
    ---
    <li><a href={url}>{title}</a></li>
    src/pages/blog.astro
    ---
    import BaseLayout from '../layouts/BaseLayout.astro';
    import BlogPost from '../components/BlogPost.astro';
    const allPosts = Object.values(import.meta.glob('../pages/posts/*.md', { eager: true }));
    const pageTitle = "Mein Astro-Lernblog";
    ---
    <BaseLayout pageTitle={pageTitle}>
    <p>Hier werde ich über meine Erfahrungen beim Lernen von Astro berichten.</p>
    <ul>
    {allPosts.map((post: any) => <BlogPost url={post.url} title={post.frontmatter.title} />)}
    </ul>
    </BaseLayout>

Wenn deine Astro-Komponente die folgende Codezeile enthält:

---
const myPosts = Object.values(import.meta.glob('./posts/*.md', { eager: true }));
---

Wähle die Syntax, die du schreiben könntest, um Folgendes darzustellen:

  1. Den Titel deines dritten Blogbeitrags.

  2. Einen Link zur URL deines ersten Blogbeitrags.

  3. Eine Komponente für jeden Beitrag, die das Datum der letzten Aktualisierung anzeigt.

Wirke mit Community Sponsor