Hugo 5 - Comment gérer les affinités
Hugo sait gérer les affinités ou Related Content. Cette gestion se réalise par l’entremise des métadonnées des billets comme les étiquettes (tags), les catégories, les dates (date, lastmod, …) ou toute autre clé d’indexation.
Créer le partial « related.html »
D’abord je teste en recopiant l’exemple fournit (https://gohugo.io/content-management/related/#list-related-content) et créant layouts/partials/related.html
.
{{ $related := .Site.RegularPages.Related . | first 5 }}
{{ with $related }}
<h3>See Also</h3>
<ul>
{{ range . }}
<li><a href="{{ .RelPermalink }}">{{ .Title }}</a></li>
{{ end }}
</ul>
{{ end }}
J’y réalise des modifications minimes :
- ajout d’une ligne horizontale avec
<hr>
- modification de la ligne
<h3>See also</h3>
par<h2>On pourra aussi consulter</h2>
Pour l’instant, je laisse le first 5
tel que, car mon site est naissant et ce nombre de billets me convient.
Le référencer dans le partial « single.html »
Ensuite, je rajoute dans layouts/_default/single.html
l’appel au partial
<aside>
{{ if .Params.toc }} {{ partial "toc.html" . }} {{ end }}
{{ partial "related.html" . }}
</aside>
La modification de single.html
est nécessaire puisqu’on travaille au niveau du billet et non des listes.
Cela fonctionne étonnament bien.
Mise en place d’une intemporalité des affinités
Modifier config.yaml
Je souhaiterais cependant obtenir une intemporalité des affinités. En effet, par défaut, les affinités ne concernent que les billets précédents.
Pour l’obtenir, il faut toucher au fichier config.yaml
(voir https://gohugo.io/content-management/related/#default-configuration).
J’ajoute le paramétrage fournit :
related:
includeNewer: false
indices:
- name: keywords
weight: 100
- name: date
weight: 10
threshold: 80
toLower: false
Le passage à l’intemporalité nécessite de revoir les index
Je passe includeNewer
à true
pour avoir l’ensemble des billets en relation et non pas uniquement ceux qui sont antérieurs au billet affiché.
Et là plus rien ne marche…
Il faut remplacer
indices:
- name: keywords
par
indices:
- name: tags
On peut aussi ajouter d’autres indices, jouer avec leur poids respectif, voire modifier le niveau de seuil. On pourra consulter « Related Content in Hugo ».
Quant à moi, je préfère le faire simple. Mais…
Comment affiner les affinités (sic)
Il y a effectivement un mais. J’ai un article sur QGIS qui fait référence à HUGO, puisqu’il y s’agit de mettre sous HUGO une carte générée par qgis2web. Si dans les étiquettes (tags) de ce billet sur QGIS je laisse "hugo"
, alors, dans les affinités, j’ai l’ensemble des billets sur HUGO, ce qui ne me semble pas judicieux.
Il me faut donc gérer d’autres clés d’accès.
Ajouter une clé d’indexation
De manière originale, j’ajoute donc keywords
dans les métadonnées des billets. Comme expliqué dans un précédent billet, il va me falloir non seulement mettre à jour mes billets concernés (pour l’instant je n’en ai que deux), mais aussi modifier mon fichier archetypes/default.md
. J’y ajoute la ligne
keywords: []
Je vais mettre en affinité le billet QGIS concerné avec mon premier billet sur HUGO, avec le mot clé
keywords: ["qgis2web"]
Il faut aussi que dans les étiquettes du billet QGIS, je n’oublie pas d’enlever "hugo"
.
Finaliser le fichier config.yaml
Voici ma portion de config.yaml modifiée dans ce cadre :
related:
includeNewer: true
indices:
- name: keywords
weight: 100
- name: tags
weight: 80
- name: date
weight: 10
threshold: 80
toLower: false
On voit que j’ai choisi que les liens keywords
soient les plus forts. Suivent ensuite les liens par les étiquettes (tags
) et enfin par la date de création du billet (date
).
Et ça marche !
———- La citation :
C’est la terre ouverte
La terre minutieuse
La terre flagrante
Avec ses massifs de luxuriance fougueuse
Et ses falaises d’innocenceAnnie Le Brun « Ici j’ai bu l’eau du robinet » (extrait) in Annulaire de Lune Éditions Maintenant, Paris 1977