Utilisation du filtre « where » avec la boucle « range »


Il est pratique, de pouvoir parcourir les pages du site web en fonction de L’URL sur laquelle nous pointons à l’aide d’une boucle range afin d’en obtenir la liste. Par exemple si je me rends à l’URL :

monsite.loc/categories/galaxies

Une simple boucle range me fournira l’ensemble des pages galaxies.

Quand la boucle range, seule, ne suffit plus

Parfois, il n’est pas pratique de dépendre du contexte de l’URL. Dans certaines situations, je pourrais avoir besoin d’afficher les pages d’un type ou d’une catégorie précise sans dépendre de l’URL du site ou je me trouve.

Par exemple je pourrais avoir besoin d’afficher uniquement la liste des pages appartenant à la catégorie « planetes » dans une page dédiée à un évènement particulier. Cette page se situant dans une partie du site qui ne correspondrait pas au contexte catégorie « planetes » :

monsite.loc/evenement/planetarium

Avec cette URL un simple range ne suffit plus à afficher la liste des pages de ma catégorie « planetes ». La boucle range me retournera uniquement la page « planetarium ». Puisque nous nous trouvons sur une simple page qui n’a aucun rapport avec cette catégorie. Dans ce cas, l’utilisation d’un filtre « where » s’impose.

Qu’est-ce que le filtre « where »

Le filtre « where » permet de cibler précisément notre recherche de page en fonction d’un dossier, d’une catégorie ou encore d’un type de contenu. Ce filtre permet de définir notre propre contexte de recherche. Un filtre « where » doit être associé à une boucle pour fonctionner. Voici un exemple de boucle utilisant le filtre where :

{{ range where .Site.Pages "Parametre" "valeur" }}

Filtrage par variable

Il est possible de filtrer notre boucle par des variables fournies par Hugo. Avec les variables, on peut donc filtrer le résultat par titre (.Title), par date (.Date), par catégorie(.Site.Taxonomies.category) etc.

Une pratique courante revient à utiliser la variable .Section dans nos boucles. Cette variable permet d’obtenir la section qui définit notre page (le nom du dossier qui contient notre page). De cette manière, il très facile de filtrer un contenu se trouvant dans monsite.loc/planetes/ grâce au code suivant :

{{ range where .Site.Pages ".Section" "planetes" }}
{{ .Title }}
{{ end }}

Cette boucle avec le filtre « .Section » permettra d’obtenir uniquement les pages appartenant à l’URL monsite.loc/planetes , les fichiers réels des pages se trouvant dans content/planetes/ de notre dossier de travail.

Filtrage par métadonnée de page

Il est possible de créer des requêtes sur-mesure en fonction de ce que nous cherchons à faire. Par exemple, si nous décidions de créer une page dédiée aux meilleurs articles du site web à l’adresse monsite.loc/page/best. Nous pourrions définir dans chacun de ces articles dans le front matter (la zone des métadonnées) un « type:best » de cette manière :

---
Title: "le titre"
type: "best"
---

Ainsi, une boucle filtrée par métadonnée nous permettrait la récupération de ces articles sur notre page des meilleurs articles :

{{ range where .Site.Pages "Type" "best" }}
{{ .Title }}
{{ end }}

Conclusion

L’utilisation des boucles filtrées est une technique très puissante permettant d’obtenir des résultats très précis. Attention à la confusion tout de même. Souvenez-vous que ces boucles sont utilisées pour générer un site web final. Contrairement aux Frameworks web dynamiques, ces boucles doivent être considérées comme des outils de génération et non de rendu en temps réel de vos pages.