XinCTO/hexo you may also like

Ecrit le Sat, 14 October 2017 11:53:25 +0000
719 mots 4 minutes

hexo you may also like

Comme vous le savez de mes articles précedents1 2, hexo est un outil intéressant pour la construction de sites web statiques apportant donc rapidité dans le chargement des pages et haut niveau de sécurité puisque aucun moteur n’est embarqué sur le serveur web. En revanche, il peut manquer des fonctionnalités que nous pouvons facilement combler par un peu de développement spécifique.

Je vous présente ici mon module hexo-near-post qui permet d’ajouter quelques articles en référence à celui actuellement parcourus afin de faciliter la rétention du lecteur.

Le moteur de hexo étant écrit en nodejs, les modules utilisent également ce langage, bien que n’étant pas, de loin, un expert de cette technologie, j’ai fait très simple sur ce module. Il se décompose en deux parties :

  • un analyseur de l’ensemble des articles du site afin d’en indexer le contenu et de déterminer les distances entre les différents articles
  • le module permettant d’enrichir un article des articles connexes et de présenter le contenu sur la page en cours de construction

Pour des raisons de simplicité d’écriture, la première partie est écrite en python (je suis plus à l’aise avec ce langage) puisque préliminaire et donc executé en batch. Si des volontaires souhaitent rendre cette partie plus pure en le portant en javascript, je suis preneur, bien entendu.

Distance

L’analyseur va regarder l’ensemble des articles du site sur la base des sources, supprimer les mots vides de contenus (avec un dictionnaire en français pour l’instant dans stopwords-fr.txt), stocker les mots restants dans des tableaux qui formerons 2 à 2 des matrices de proximité. L’algorithme est volontairement simple et rapide, il pourra être amélioré par la suite.

Le résultat est inscrit dans le fichier near-post.json qui sera utilisé lors de la construction du site pour afficher les articles connexes. Le fichier contient l’ensemble des couples d’articles avec un indice numérique du niveau de rapprochement qui permettra de filtrer le niveau minimum requis pour considérer que 2 articles sont assez proches pour apparaître dans la section.

1{
2  "confidence": "very good",
3  "distance": 6.289056240987022,
4  "file1": "_posts/2017/08/sites-d-information-et-trackers.md",
5  "file2": "_posts/2017/08/webkit-intelligent-tracking-prevention.md"
6}

J’ai pour ma part mis la construction de la distance au niveau du Makefile de génération de mon site, ce qui fait qu’il n’est pas pris en compte en permanence, mais uniquement lors des phases de tests de cohérence et de génération globale pour publication.

Si le fichier n’est pas présent lors de la génération par hexo, le module affiche une erreur et aucun article connexe ne sera affiché.

Sur la base des 12 articles de ce site à date, le délai de construction sur une VM modeste est de l’ordre de 0.6 seconde.

Génération de la section

Afin d’activer la mise en place de la section en bas de vos articles il est nécessaire d’y inclure un tag spécifique qui sera remplacé lors de la génération par la liste des articles connexes ou supprimée si aucun n’est disponible ou que le module est désactivé.

Le module est décomposé en 2 parties principales :

  • before_post_render : tous les articles sont parcourus et une table est construite avec l’url, le titre et la date de parution. Cette table sera utilisée par la suite pour traduire les articles connexes d’un nom de fichier à une url et un titre.
  • after_post_render : une fois l’article construit, il est nécessaire de traiter le remplacement du tag near_posts, soit en le supprimant, soit en y mettant la liste des articles connexes. On trouve l’ensemble de articles adjacents, on les trie par distance et on en pioche le nombre configuré.

Un exemple de section de feuille de style est également proposé afin d’afficher la liste des articles, le titre avec le lien et la distance.

Configuration

Dans le fichier _config.yml de votre site, vous pouvez ajouter la section de paramétrage :

1near_post:
2  enabled: true
3  limit: 2
4  posts: 3
5  heading: à voir aussi

Afin de positionner la limite basse du niveau de proximité, le nombre d’article connexes ainsi que l’entête de la section qui remplacera le near_posts positionné dans vos articles.

Sources

L’utilisation de ce module nécessite l’installation des 2 parties, l’ensemble des sources est disponible sur mon github, le module node s’installe via npm.

Le tout est proposé sous licence GPL-3.0


Photo Mr Cup / Fabien Barral

Voir aussi