Ordre de Recherche Hugo
Avant de créer vos modèles, il est important de savoir comment Hugo recherche des fichiers dans la structure de répertoire de votre projet.
Hugo utilise une liste prioritaire appelée ordre de recherche car elle traverse votre dossier layouts dans votre projet Hugo en cherchant le modèle approprié pour rendre votre contenu.
L’ordre de recherche de modèle est une cascade inversée : si le modèle A n’est pas présent ou spécifié, Hugo se tournera vers le modèle B. Si le modèle B n’est pas présent ou spécifié, Hugo recherchera le modèle C … et ainsi de suite jusqu’à ce qu’il atteigne le dossier _default/ pour votre projet ou votre thème. À bien des égards, l’ordre de recherche est similaire au concept de programmation d’une instruction de commutation sans décalage.
La puissance de l’ordre de recherche est de vous permettre de concevoir des mises en page spécifiques et de garder votre modélisation DRY.
Ordres de Recherche
L’odre de recherche respectif pour chacun des modèles d’Hugo a été défini dans la documentation d’Hugo :
- Modèle de Page d’Accueil
- Modèles Base
- Modèles de Page Section
- Modèles de Liste de Taxonomie
- Modèles de Termes de Taxonomie
- Modèles de Page Unique
- Modèles RSS
- Modèles Shortcode
Exemples de Recherche de Modèle
L’ordre de recherche est mieux illustré par des exemples. Ce qui suit vous montre le processus utilisé par Hugo pour trouver le modèle approprié pour rendre vos modèles de page unique, mais le concept est vrai pour tous les modèles de Hugo.
- Le projet utilise le thème
montheme(spécifié dans la configuration du projet). - Les layouts et les dossiers de contenu du projet sont les suivants :
.
├── content
│ ├── events
│ │ ├── _index.md
│ │ └── my-first-event.md
│ └── posts
│ ├── my-first-post.md
│ └── my-second-post.md
├── layouts
│ ├── _default
│ │ └── single.html
│ ├── posts
│ │ └── single.html
│ └── reviews
│ └── reviewarticle.html
└── themes
└── montheme
└── layouts
├── _default
│ ├── list.html
│ └── single.html
└── posts
├── list.html
└── single.html
Maintenant nous pouvons regarder le front matter pour les trois fichiers de contenu (à savoir .md).
Exemple : mon-premier-post.md
---
title: Mon Premier Post
date: 2017-02-19
description: Ceci est mon premier post.
---
Au moment de construire votre site, Hugo passera l’ordre de recherche jusqu’à ce qu’il trouve ce dont il a besoin pour my-first-post.md :
/layouts/UNSPECIFIED/UNSPECIFIED.html/layouts/posts/UNSPECIFIED.html/layouts/UNSPECIFIED/single.html/layouts/posts/single.html
BREAK/layouts/_default/single.html/themes/<THEME>/layouts/UNSPECIFIED/UNSPECIFIED.html/themes/<THEME>/layouts/posts/UNSPECIFIED.html/themes/<THEME>/layouts/UNSPECIFIED/single.html/themes/<THEME>/layouts/posts/single.html/themes/<THEME>/layouts/_default/single.html
Notez le terme UNSPECIFIED plutôt que UNDEFINED. Si vous n’indiquez pas à Hugo le type et le layout spécifiques, il fera des hypothèses basées sur des valeurs par défaut saines. Mon-premier-post.md ne spécifie pas un type de contenu dans son front matter. Par conséquent, Hugo suppose que le contenu type et section (c’est-à-dire posts, qui est défini par l’emplacement du fichier) sont un dans le même. (Plus d’infos ici sur les sections.)
Mon-premier-post.md ne spécifie pas non plus un layout dans son front matter. Par conséquent, Hugo suppose que mon-premier-post.md, qui est de type page et un unique élément de contenu, devrait par défaut être la prochaine occurrence d’un modèle single.html dans la recherche (#4).
Exemple : mon-second-post.md
---
title: Mon Second Post
date: 2017-02-21
description: Ceci est mon second post.
type: review
layout: reviewarticle
---
Voici le moyen avec lequel Hugo traverse l’odre de recherche de page-unique pour my-second-post.md:
/layouts/review/reviewarticle.html
BREAK/layouts/posts/reviewarticle.html/layouts/review/single.html/layouts/posts/single.html/layouts/_default/single.html/themes/<THEME>/layouts/review/reviewarticle.html/themes/<THEME>/layouts/posts/reviewarticle.html/themes/<THEME>/layouts/review/single.html/themes/<THEME>/layouts/posts/single.html/themes/<THEME>/layouts/_default/single.html
Le front matter dans mon-second-post.md spécifie le contenu type (c’est-à-dire review) ainsi que le layout (c’est-à-dire reviewarticle). Hugo trouve la mise en page dont il a besoin au niveau supérieur de la recherche (#1) et ne continue pas à rechercher dans les autres modèles.
Exemple : my-first-event.md
---
title: My First Event
date: 2018-07-06
description: Ceci est un évenement à venir..
---
Voici la façon avec laquelle Hugo traverse l’ordre de recherche de page-unique pour my-first-event.md:
/layouts/UNSPECIFIED/UNSPECIFIED.html/layouts/events/UNSPECIFIED.html/layouts/UNSPECIFIED/single.html/layouts/events/single.html/layouts/_default/single.html
BREAK/themes/<THEME>/layouts/UNSPECIFIED/UNSPECIFIED.html/themes/<THEME>/layouts/events/UNSPECIFIED.html/themes/<THEME>/layouts/UNSPECIFIED/single.html/themes/<THEME>/layouts/events/single.html/themes/<THEME>/layouts/_default/single.html