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
Dynamische Anzeige einer Liste von Beiträgen
Abschnitt betitelt „Dynamische Anzeige einer Liste von Beiträgen“-
Füge den folgenden Code zu
blog.astrohinzu, 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> -
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. -
Füge einen neuen Blogbeitrag hinzu, indem du eine neue Datei
post-4.mdinsrc/pages/posts/erstellst und einige Markdown-Inhalte hinzufügst. Achte darauf, dass du mindestens die unten verwendeten Frontmatter-Eigenschaften einfügst.---layout: ../../layouts/MarkdownPostLayout.astrotitle: Mein vierter Blogbeitragauthor: Astro-Lernenderdescription: "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-08tags: ["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. -
Schau dir deine Blog-Seite in der Browser-Vorschau unter
http://localhost:4321/blogan und such nach einer aktualisierten Liste mit vier Einträgen, darunter dein neuer Blogbeitrag!
Challenge: Erstelle eine BlogPost-Komponente
Abschnitt betitelt „Challenge: Erstelle eine BlogPost-Komponente“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:
<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
-
Erstelle eine neue Komponente in
src/components/.Zeige den Dateinamen an
BlogPost.astro -
Schreib die Codezeile in deine Komponente, damit sie einen
titleund eineurlalsAstro.propsempfangen kann.Code anzeigen
src/components/BlogPost.astro ---const { title, url } = Astro.props;--- -
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> -
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";--- -
Ü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>
Test dein Wissen
Abschnitt betitelt „Test dein Wissen“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:
-
Den Titel deines dritten Blogbeitrags.
-
Einen Link zur URL deines ersten Blogbeitrags.
-
Eine Komponente für jeden Beitrag, die das Datum der letzten Aktualisierung anzeigt.