Comment écrire un plugin Octopress
Pour mon blog Octopress, je voulais un repère visuel qui marque le niveau de difficulté des articles. Un truc comme «Niveau : débutant» ou bien «Niveau : confirmé» avec un peu de couleur. Rien de bien compliqué en fait. Si passer par l’écriture d’un plugin pour obtenir ce genre d’effet n’est pas absolument neccéssaire, ça rendra l’écriture des articles plus agréable et plus rapide. Et puis je vais apprendre quelque chose de nouveau : comment écrire un plugin pour Octopress ?
Tout d’abord, le site d’Octopress ne propose pas de documentation sur
l’écriture de plugins. Par contre, le wiki fournit
une longue liste de plugins
dont les sources sont les bienvenues. Jekyll, le programme sur lequel est
construit Octopress, est assez spartiate en ce qui concerne
l’écriture de plugin pour Jekyll. Malgré
tout, ce lien peut s’avérer utile. J’ai trouvé que la meilleure source
d’information pour commencer est le contenu du dossier plugin
de votre
blog Octopress.
Si vous voulez tout de suite jetez un coup d’oeil sur le code source du plugin terminé, vous pouvez le trouver sur Github, à la version 0.1.0.
Démarront avec le plugin le plus simple auquel je puisse penser. Créer un
fichier plugins/level_tag.rb
et placez y le contenu suivant:
Ensuite, dans un post, appelez le plugin de cette façon:
Puis lancez Octopress:
rake generate
rake preview
Pointez votre navigateur sur localhost:4000
et voilà. Un beau label
«Niveau : facile» apparait dans votre post. Voyons maintenant comment ça
marche.
Un plugin pour Octopress est avant tout un plugin pour Jekyll.
Et Jekyll se sert du
moteur de template Liquid. Notre classe
LevelTag
va donc hériter de Liquid::Tag
, et être placée dans le
module Jekyll. La classe Liquid::Tag
nous offre tout ce qu’il faut
pour générer du html, récupérer des arguments, etc.
La seule méthode de Liquid::Tag
qu’il faut absolument implémenter est
render
. C’est elle qui va produire le code html qui sera placé dans
notre article, à la place de l’appel du plugin.
Finalement, il faut enregistrer notre plugin auprès de Liquid::Template
.
Le premier argument passé à register_tag
est le nom sous lequel nous
voulons appeler le plugin dans nos articles. Le second argument est la
classe de notre plugin.
Pour aller plus loin, il va falloir passer des arguments depuis l’appel du
plugin jusqu’à notre classe LevelTag
. On change donc l’appel ainsi:
Et on transforme le plugin de cette façon:
Voyons les changements en détails.
La variable level
va contenir l’argument passé lors de l’appel du
plugin (facile
), donc level == 'facile'
. On sauvegarde
cette valeur dans un membre pour pouvoir la réutiliser plus tard.
Grâce à @level
on a les moyens de faire sortir à render
l’argument
passé lors de l’appel du plugin.
Comme certains voudront «Niveau : facile» et d’autres voudront «Niveau : débutant», il va nous falloir un moyen de personnaliser tout ça. C’est ce qu’on découvrira dans un prochain numéro.
À demain.