4.5 Les templates de publication

Un template est en fait une publication vierge qui a cependant été préformatée pour contenir des choses redondantes à rédiger ou à programmer manuellement. Typiquement, pour une galerie, vous pourriez vouloir un template qui contiendrait déjà la ou les balises Markdown pour inclure une ou plusieurs images, les champs categories et tags préremplis, etc.

Par exemple :

authors: 'Denis Salem'
categories: 
  - Photographies:
     - Nature
title: Champignons trop mignons (mais pas commestibles, alors calme-toi)
---VENC-BEGIN-PREVIEW---
---VENC-END-PREVIEW---
![.:GetEntryTitle:.](".:GetEntryTitle:.")

VenC est livré avec des exemples de templates. En voici la liste :

Parmi ces templates, certains servent surtout à illustrer l'usage de certaines fonctionnalités de VenC.

Ces templates sont normalement installés dans : $(venc -pp)/themes_templates.

Pour utiliser un template, il suffit de passer son nom de fichier (sans le chemin) à VenC au moment de la création d'une nouvelle publication. Par exemple :

jeanrochefort@anonymous ~ $ venc -ne "Amanite tue-mouches" champignons_magiques

VenC va d'abord essayer de trouver votre template dans le répertoire templates de votre blog. Sinon, il essayera de le trouver parmi les templates de publication prédéfinis, qui sont listés plus haut.

4.5.1 Arguments d'un template

Les templates supportent la paramétrisation au moment de l'exécution de la commande --new-entry. C'est le cas par exemple du template oEmbed ou images. Quand un template est appelé sans ses arguments, la création de la publication échoue.

Avant d'utiliser un template, il faut donc connaître ses arguments à l'aide de la commande --template-arguments.

Les paramètres de template prennent la forme de placeholder Python, ceux qui sont utilisés avec la fonction format. Par exemple :

{moo} {foo} {bar}

Pour fonctionner il faut passer à VenC un troisième argument, au format JSON, qui portera les clés-valeurs nécessaires au template.

4.5.1.1 Premier cas pratique : oEmbed

Le template oEmbed se présente ainsi :

authors:
categories:
title: {venc_entry_title}
---VENC-BEGIN-PREVIEW---
---VENC-END-PREVIEW---
.:GetEmbedContent::{embed_content}:.

Dans ce template, on voit que l'on a deux placeholders :

Pour créer une publication avec le template oEmbed il faudrait donc utiliser la commande VenC --new-entry, comme ci-dessous :

venc --new-entry \
  "Des images stylées, comme l'histoire de France" \
  oEmbed \
  '{"embed_content":"https://www.youtube.com/watch?v=dQw4w9WgXcQ"}'

4.5.1.2 Second cas pratique : images

Le template images se présente ainsi :

authors:
categories:
title: {venc_entry_title}
images: {images}
---VENC-BEGIN-PREVIEW---
---VENC-END-PREVIEW---
.:ForEntryMetadata::images::<img src="{value}" title="" alt="{value}">:: :.

Dans ce template on voit que l'on a trois placeholders :

Comme la métadonnée d'origine dans l'entête YAML du template est appelée dans ForEntryMetadata, il faut que la variable images soit une liste. On doit donc utiliser la commande VenC --new-entry comme ci-dessous :

Pour plus de clarté l'exemple utilise une approche multiligne en Bash, comme expliqué ici.

JSON=$(cat <<-END
{
    "images" : [
        "https://i.kym-cdn.com/photos/images/newsfeed/000/247/207/813.gif",
        "https://i.kym-cdn.com/photos/images/newsfeed/001/390/627/208.jpg"
    ]
}
END
)
venc --new-entry \
"Des images stylées, comme l'histoire de France" \
images \
"$JSON"

4.5.2 Arguments par défaut