La directive `template` est fournie par le module d'extension [[!iki
plugins/template desc=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 [[!cpan 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 [[ikiwiki/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
[[ikiwiki/WikiLink]].


[[!meta robots="noindex, follow"]]
