Créez une archive de billets de blog
Maintenant que vous avez quelques billets de blog à lier, configurons la page Blog pour créer automatiquement une liste d’entre eux !
Préparez-vous à…
- Accédez aux données de tous vos billets en une fois en utilisant
Astro.glob()
- Affichez une liste générée dynamiquement de billets sur votre page Blog
- Refactorez pour utiliser un composant
<BlogPost />
pour chaque élément de liste
Afficher dynamiquement une liste de billets
- Ajoutez le code suivant à
blog.astro
pour retourner des informations sur tous vos fichiers Markdown.Astro.glob()
renverra un tableau d’objets, un pour chaque billet de blog.
---import BaseLayout from '../layouts/BaseLayout.astro'const allPosts = await Astro.glob('../pages/posts/*.md');const pageTitle = "Mon blog d'apprentissage Astro";---<BaseLayout pageTitle={pageTitle}> <p>C'est ici que je vais publier sur mon voyage d'apprentissage d'Astro.</p> <ul> <li><a href="/posts/post-1/">Poste 1</a></li> <li><a href="/posts/post-2/">Poste 2</a></li> <li><a href="/posts/post-3/">Poste 3</a></li> </ul></BaseLayout>
-
Pour générer toute la liste de billets dynamiquement, en utilisant les titres et les URL des billets, remplacez vos balises
<li>
individuelles par le code Astro suivant :src/pages/blog.astro ---import BaseLayout from '../layouts/BaseLayout.astro'const allPosts = await Astro.glob('../pages/posts/*.md');const pageTitle = "Mon blog d'apprentissage Astro";---<BaseLayout pageTitle={pageTitle}><p>C'est ici que je vais publier sur mon voyage d'apprentissage d'Astro.</p><ul><li><a href="/posts/post-1/">Poste 1</a></li><li><a href="/posts/post-2/">Poste 2</a></li><li><a href="/posts/post-3/">Poste 3</a></li>{allPosts.map((post) => <li><a href={post.url}>{post.frontmatter.title}</a></li>)}</ul></BaseLayout>L’ensemble de votre liste de billets de blog est maintenant généré dynamiquement, en parcourant le tableau renvoyé par
Astro.glob()
. -
Ajoutez un nouveau billet de blog en créant un nouveau fichier
post-4.md
danssrc/pages/posts/
et en ajoutant un contenu Markdown. Assurez-vous d’inclure au moins les propriétés de frontmatter utilisées ci-dessous.
---layout: ../../layouts/MarkdownPostLayout.astrotitle: Mon quatrième billet de blogauthor: Apprenti Astrodescription: "Ce billet apparaîtra tout seul !"image: url: "https://docs.astro.build/default-og-image.png" alt: "Le mot « astro » sur fond d'illustration de planètes et d'étoiles."pubDate: 2022-08-08tags: ["astro", "réussites"]---Ce billet devrait apparaître avec mes autres billets de blog, car `Astro.glob()` renvoie une liste de tous mes billets pour créer ma liste.
- Revisitez votre page de blog dans votre aperçu de navigateur à l’adresse
http://localhost:4321/blog
et recherchez une liste mise à jour avec quatre éléments, y compris votre nouveau billet de blog !
Défi : Créez un composant BlogPost
Essayez de faire vous-même toutes les modifications nécessaires à votre projet Astro afin de pouvoir utiliser le code suivant pour générer votre liste de billets de blog :
<ul> {allPosts.map((post) => <li><a href={post.url}>{post.frontmatter.title}</a></li>)} {allPosts.map((post) => <BlogPost url={post.url} title={post.frontmatter.title} />)}</ul>
Cliquez pour voir les étapes
-
Créez un nouveau composant dans
src/components/
.Afficher le nom de fichier
BlogPost.astro -
Écrivez la ligne de code dans votre composant pour qu’il puisse recevoir un
title
et uneurl
en tant queAstro.props
.Afficher le code
src/components/BlogPost.astro ---const { title, url } = Astro.props;--- -
Ajoutez la mise en forme utilisée pour créer chaque élément de votre liste de billets de blog.
Afficher le code
src/components/BlogPost.astro <li><a href={url}>{title}</a></li> -
Importez le nouveau composant dans votre page de blog.
Afficher le code
src/pages/blog.astro ---import BaseLayout from '../layouts/BaseLayout.astro';import BlogPost from '../components/BlogPost.astro';const allPosts = await Astro.glob('../pages/posts/*.md');const pageTitle = "Mon blog d'apprentissage Astro";--- -
Vérifiez-vous : consultez le code du composant terminé.
Afficher le code
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 = await Astro.glob('../pages/posts/*.md');const pageTitle = "Mon blog d'apprentissage Astro"---<BaseLayout pageTitle={pageTitle}><p>C'est ici que je vais publier sur mon voyage d'apprentissage d'Astro.</p><ul>{allPosts.map((post) => <BlogPost url={post.url} title={post.frontmatter.title} />)}</ul></BaseLayout>
Testez vos connaissances
Si votre composant Astro contient la ligne de code suivante :
---const myPosts = await Astro.glob('../pages/posts/*.md');---
Choisissez la syntaxe que vous pourriez écrire pour représenter :
-
Le titre de votre troisième billet de blog.
-
Un lien vers l’URL de votre premier billet de blog.
-
Un composant pour chaque billet, affichant la date de sa dernière mise à jour.