]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blobdiff - doc/ikiwiki/directive/template.mdwn
guard templates with the if directive where necessary
[git.ikiwiki.info.git] / doc / ikiwiki / directive / template.mdwn
index 052ca78732cc2ad5477cc2ae4d03a15deef80438..df391f99e0a23dd7cda85a8c29c1aef80baa707f 100644 (file)
@@ -34,11 +34,15 @@ large chunks of marked up text to be embedded into a template:
 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
@@ -53,25 +57,33 @@ few things:
 * 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