Routage
Astro utilise un routage basé sur les fichiers pour générer les URLs de votre dossier de compilation en fonction des dossiers de votre projet src/pages/
. Lorsqu’un fichier est ajouté au dossier src/pages/
de votre projet, une route avec le même nom que ce fichier est alors disponible automatiquement.
Routes Statiques
Section titled Routes StatiquesLes composants .astro
et les fichiers Markdown (.md
) dans le dossier src/pages/
deviennent des pages de votre site web. Chaque composant (nommé composant Page) correspond à son chemin et nom dans le dossier src/pages/
.
Navigation entre les pages
Section titled Navigation entre les pagesAstro utilise des éléments HTML<a>
standards pour naviguer entre les routes. Il n’y a pas de composant <Link>
spécifique au framework fourni.
Routes Dynamiques
Section titled Routes DynamiquesUn fichier de page Astro peut spécifier des paramètres de route dynamiques dans son nom de fichier pour générer les pages correspondantes. Par exemple, vous pouvez créer un fichier authors/[author].astro
qui génère une page de biographie pour chaque auteur de votre blog. author
devient un paramètre accessible depuis l’intérieur de la page.
Dans le mode de sortie statique par défaut d’Astro, ces pages sont générées au moment de la construction, et vous devez donc prédéterminer la liste des author
qui obtiennent un fichier correspondant. En mode SSR, une page sera générée sur demande pour toute route qui correspond.
Mode Statique (SSG)
Section titled Mode Statique (SSG)Parce que toutes les routes doivent être déterminées au moment de la construction, une route dynamique doit exporter un getStaticPaths()
qui renvoie un tableau d’objets avec une propriété params
. Chacun de ces objets générera une route correspondante.
[dog].astro
définit le paramètre dynamique dog
dans son nom de fichier, donc les objets retournés par getStaticPaths()
doivent inclure dog
dans leurs params
. La page peut alors accéder à ce paramètre en utilisant Astro.params
.
Cela va générer trois pages : /dogs/clifford
, /dogs/rover
, et /dogs/spot
, chacune affichant le nom du chien correspondant.
Le nom du fichier peut inclure plusieurs paramètres, qui doivent tous être inclus dans les objets params
de getStaticPaths()
:
Cela va générer /en-v1/info
et /fr-v2/info
.
Les paramètres peuvent être inclus dans des parties distinctes du chemin, ainsi nous pourrions utiliser src/pages/[lang]/[version]/info.astro
avec le même getStaticPaths
pour générer /en/v1/info
et /fr/v2/info
.
📚 En savoir plus sur getStaticPaths()
(EN).
Paramètres REST
Section titled Paramètres RESTSi vous avez besoin de plus de flexibilité dans le routage de vos URL, vous pouvez utiliser un paramètre REST ([...path]
) dans votre nom de fichier .astro
pour correspondre aux chemins de fichiers de n’importe quelle profondeur :
Cela générera /sequences/one/two/three
, /sequences/four
, et /sequences
. (Donner au paramètre rest la valeur undefined
lui permet de correspondre à la page de niveau principal).
Les paramètres rest peuvent être utilisés avec d’autres paramètres nommés. Par exemple, nous pourrions représenter le visualiseur de fichiers de GitHub avec une route dynamique comme celle-ci :
Dans cet exemple, une requête pour /withastro/astro/tree/main/docs/public/favicon.svg
serait divisée en les paramètres nommés suivants :
Exemple : Pages dynamiques à plusieurs niveaux
Section titled Exemple : Pages dynamiques à plusieurs niveauxIci, nous utilisons un paramètre rest ([...slug]
) et la fonctionnalité props
(EN) de getStaticPaths()
pour générer des pages pour des slugs de différentes profondeurs.
Mode serveur (SSR)
Section titled Mode serveur (SSR)En mode SSR, les routes dynamiques sont définies de la même manière : incluez des crochets [param]
ou [...path]
dans vos noms de fichiers pour faire correspondre des chaînes ou des chemins arbitraires. Mais comme les routes ne sont plus construites à l’avance, la page sera servie à toute route correspondante. Puisque ce ne sont pas des routes “statiques”, getStaticPaths
ne devrait pas être utilisé.
Cette page sera servie pour toute valeur de resource
et id
: resources/users/1
, resources/colors/blue
, etc.
Modification de l’exemple [...slug]
pour le mode SSR
Section titled Modification de l’exemple [...slug] pour le mode SSRComme les pages SSR ne peuvent pas utiliser getStaticPaths
, elles ne peuvent pas recevoir de props. Ici, nous modifions notre exemple précédent pour qu’il fonctionne en SSR en recherchant la valeur du paramètre slug
dans un objet. Si la route est à la racine (”/”), le paramètre slug sera undefined
. Si la valeur n’existe pas dans l’objet, nous redirigeons vers une page 404.
Ordre de Priorité des Routes
Section titled Ordre de Priorité des RoutesIl est possible que plusieurs routes correspondent au même chemin URL. Par exemple, chacune de ces routes correspondrait à /posts/create
:
Directorysrc/pages/
Directoryposts/
- create.astro
- [pid].astro
- […slug].astro
Astro a besoin de savoir quelle route doit être utilisée pour construire la page. Pour ce faire, il les trie en fonction des règles suivantes :
- Les routes statiques sans paramètres de chemin d’accès ont la priorité sur toutes les autres routes.
- Les routes dynamiques utilisant des paramètres nommés sont prioritaires par rapport aux paramètres rest.
- Les paramètres de repos ont la priorité la plus basse
- Les égalités sont résolues par ordre alphabétique
Étant donné l’exemple ci-dessus, voici quelques exemples de la façon dont les règles vont faire correspondre une URL demandée à la route utilisée pour construire le HTML :
pages/post/create.astro
- Correspondra au chemin/post/create
pages/post/[pid].astro
- Correspondra au chemin/post/1
,/post/abc
, etc. Mais pas à/post/create
pages/post/[...slug].astro
- Correspondra au chemin/post/1/2
,/post/a/b/c
, etc. Mais pas à/post/create
,/post/1
,/post/abc
Pagination
Section titled PaginationAstro supporte la pagination pour les grandes collections de données qui doivent être divisées en plusieurs pages. Astro va générer les propriétés les plus communes de pagination comme l’URL pour page précédente / suivante, le nombre total de pages, etc.
Les noms de routes paginées doivent utiliser la même syntaxe de [crochets]
que les routes dynamiques. Par exemple, le nom de fichier /astronauts/[page].astro
générera des routes pour /astronauts/1
, /astronauts/2
, etc, là où [page]
est le numéro de pages générées.
Vous pouvez utiliser la fonction paginate()
pour générer ces pages pour un tableau de valeurs comme suit :
Ceci va générer les pages suivantes, avec deux éléments par page :
/astronauts/1
- Page 1: Affiche “Neil Armstrong” et “Buzz Aldrin”/astronauts/2
- Page 2: Affiche “Sally Ride” et “John Glenn”/astronauts/3
- Page 3: Affiche “Jean-Loup Chrétien” et “Thomas Pesquet”
La Propriété page
Section titled La Propriété pageLorsque vous utilisez la fonction paginate()
, chaque page transmet ses données via une propriété page
. La propriété page
a pas mal de propriétés utiles, mais voici les plus importantes :
page.data
- Tableau contenant portion de données de la page que vous avez passé dans la fonctionpaginate()
page.url.next
- Lien vers la page suivante dans la collectionpage.url.prev
- Lien vers la page précédente dans la collection
Référence Complète de l’API
Section titled Référence Complète de l’APIPagination Imbriquée
Section titled Pagination ImbriquéeUne utilisation plus avancée pour la pagination est la pagination imbriquée. Il s’agit du cas où la pagination est combinée avec d’autres paramètres de route dynamique. Vous pouvez utiliser la pagination imbriquée pour grouper votre collection paginée par une propriété ou un tag.
Par exemple, si vous voulez grouper vos articles en Markdown par tag, vous pouvez utiliser la pagination imbriquée en créant une page /src/pages/[tag]/[page].astro
qui correspond aux URL suivantes :
/red/1
(tag=red)/red/2
(tag=red)/blue/1
(tag=blue)/green/1
(tag=green)
La pagination imbriquée fonctionne en retournant une collection de résultats paginate()
depuis getStaticPaths()
, une pour chaque groupe.
Dans l’exemple suivant, nous allons implémenter la pagination imbriquée pour construire les URL listées ci-dessus :
Exclure des pages
Section titled Exclure des pagesVous pouvez exclure des pages, ou même des répertoires entiers de la construction en préfixant leurs noms avec un trait de soulignement (_
).
Cela vous permet de créer des pages privées, et aussi de placer les tests, les utilitaires et les composants avec les pages qui leur sont associées, en les empêchant d’être construits en fichiers .html
et placés dans le répertoire dist/
.
Dans cet exemple, seuls src/pages/index.astro
et src/pages/posts/post1.md
seront construits comme routes de pages et fichiers HTML.
Directorysrc/pages/
Directory_répertoire-caché/
- page1.md
- page2.md
- _page-cachée.astro
- index.astro
Directoryposts/
- _SomeComponent.astro
- _utils.js
- post1.md