La directive template est fournie par le module d'extension template.

Cette directive permet d'utiliser des pages de wiki comme modèles. Ces modèles peuvent être remplis et insérés dans d'autres pages du wiki. La page templates liste les modèles utilisables avec cette directive.

Cette directive possède un paramètre id qui identifie le modèle à utiliser. Les autres paramètres servent à remplir le modèle.

Exemple :

[[!template  id=note text="""Here is the text to insert into my note."""]]

Cette expression remplit le modèle note, remplaçant le champ text par la valeur spécifiée, et insérant le résultat dans la page.

Utilisation d'un modèle

Une valeur peut contenir tout marquage autorisé dans une page de wiki externe au modèle. On peut même inclure des guillemets dans la valeur, en les triplant. Avec des valeurs sur plusieurs lignes entre guillemets, on peut ainsi insérer de longs passages de texte dans un modèle.

    [[!template  id=foo name="Sally" color="green" age=8 notes="""
    * [[Charley]]'s sister.
    * "I want to be an astronaut when I grow up."
    * Really 8 and a half.
    """]]

Création d'un modèle

The template is in a regular wiki page, located in the templates/ subdirectory inside the source directory of the wiki. The contents of the templatebody directive are used as the template. Anything outside that directive is not included in the template, and is usually used as documentation describing the template.

If the template does not contain a templatebody directive, the entire source of the page is used for the template. This is deprecated, because it leads to the template markup being interpreted as ordinary page source when the page is built, as well as being used as the template.

Alternatively, templates can be stored in a directory outside the wiki, as files with the extension ".tmpl". By default, these are searched for in /usr/share/ikiwiki/templates, the templatedir setting can be used to make another directory be searched first. When referring to templates outside the wiki source directory, the "id" parameter is not interpreted as a pagespec, you must include the full filename of the template page including the ".tmpl" extension, and the templatebody directive is not used. E.g.:

[[!template  id=blogpost.tmpl]]

Le modèle utilise la syntaxe du module Perl HTML::Template qui permet de faire des choses assez compliquées. Consultez la documentation mais vous n'avez besoin de connaître que peu de choses :

  • Chaque paramètre passé à la directive template créera une variable pour le modèle. Certaines variables sont prédéfinies comme PAGE et BASENAME.
  • Pour insérer la valeur d'une variable, utilisez <TMPL_VAR variable>. Le marquage wiki dans la valeur sera d'abord converti en HTML.
  • Pour insérer la valeur brute d'une variable, sans conversion en HTML du marquage wiki, utilisez <TMPL_VAR raw_variable>.
  • Pour rendre un texte dépendant d'une variable, utilisez <TMPL_IF variable>text</TMPL_IF>
  • Pour utiliser un texte quand une variable est définie et un autre texte quand elle n'est pas définie, utilisez <TMPL_IF variable>text<TMPL_ELSE>other text</TMPL_IF>

Voici un exemple :

    [[!templatebody  <<ENDBODY
    <span class="infobox">
    Name: [[<TMPL_VAR raw_name>]]<br />
    Age: <TMPL_VAR age><br />
    <TMPL_IF color>
    Favorite color: <TMPL_VAR color><br />
    <TMPL_ELSE>
    No favorite color.<br />
    </TMPL_IF>
    <TMPL_IF notes>
    <hr />
    <TMPL_VAR notes>
    </TMPL_IF>
    </span>
    ENDBODY]]

This template describes a person. Parameters: name, age,
color (favorite color, optional), notes (optional).

Le modèle rempli sera formaté comme le reste de la page dans laquelle il se trouve. Vous pouvez donc inclure des WikiLinks ou d'autres marquages wiki dans le modèle. Cependant ces WikiLinks n'apparaîtront pas comme des rétroliens vers la page qui utilise ce modèle.

Remarquez l'utilisation de "raw_name" dans WikiLink de l'exemple ci-dessus. Ainsi, si le nom peut être confondu avec un marquage wiki, il n'est pas converti en html avant d'être créé en tant que WikiLink.