The template is a regular wiki page, located in the `templates/`
subdirectory inside the source directory of the wiki.
-(Alternatively, templates can be stored in a directory outside the wiki,
+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`;
+By default, these are searched for in `/usr/share/ikiwiki/templates`,
the `templatedir` setting can be used to make another directory be searched
-first.)
+first. When referring to templates outside the wiki source directory, the "id"
+parameter is not interpreted as a pagespec, and you must include the full filename
+of the template page, including the ".tmpl" extension. E.g.:
+
+ \[[!template id=blogpost.tmpl]]
The template uses the syntax used by the [[!cpan HTML::Template]] perl
module, which allows for some fairly complex things to be done. Consult its
* To insert the raw value of a variable, with wiki markup not yet converted
to html, use `<TMPL_VAR raw_variable>`.
* To make a block of text conditional on a variable being set use
- `<TMPL_IF NAME="variable">text</TMPL_IF>`.
+ `<TMPL_IF variable>text</TMPL_IF>`.
* To use one block of text if a variable is set and a second if it's not,
- use `<TMPL_IF NAME="variable">text<TMPL_ELSE>other text</TMPL_IF>`
+ use `<TMPL_IF variable>text<TMPL_ELSE>other text</TMPL_IF>`
+* Each template file included in the wiki's source will also generate a regular
+ wiki page. In many cases you might want to prevent some of your template
+ being interpreted for the regular page. Use the [[if]] directive with the
+ `included()` test to guard the template code.
Here's a sample template:
- <span class="infobox">
- Name: \[[<TMPL_VAR raw_name>]]<br />
- Age: <TMPL_VAR age><br />
- <TMPL_IF NAME="color">
- Favorite color: <TMPL_VAR color><br />
- <TMPL_ELSE>
- No favorite color.<br />
- </TMPL_IF>
- <TMPL_IF NAME="notes">
- <hr />
- <TMPL_VAR notes>
- </TMPL_IF>
- </span>
+ \[[!if test="included()" then="""
+ <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>
+ """ else="""
+ This is a template page.
+ """]]
The filled out template will be formatted the same as the rest of the page
that contains it, so you can include WikiLinks and all other forms of wiki