Die template-Anweisung wird durch die template-Erweiterung bereitgestellt.

Die template-Anweisung erlaubt es, Wiki-Seiten als Vorlagen zu verwenden. Diese Vorlagen können mit dieser Anweisung in anderen Seiten verwendet und ausgefüllt werden. Auf der Vorlagen-Seite werden die Vorlagen aufgelistet, die mit dieser Anweisung verwendet werden können.

Die Anweisung nutzt den Parameter id, um die zu verwendende Vorlage auszuwählen. Die übrigen Parameter werden verwendet, um die Vorlage auszufüllen.

Beispiel

[[!template  id=note text="""Hier ist der Text, der in meine Notiz eingefügt werden soll."""]]

Dies füllt die Vorlage note aus, wobei das Feld text mit dem angegebenen Wert gefüllt wird, und fügt das Ergebnis in die Seite ein.

Eine Vorlage verwenden

Ein Wert kann im allgemeinen alle Hervorhebungen enthalten, die auf der Wiki-Seite außerhalb der Vorlage zulässig ist. Wenn der Wert in dreifache Anführungszeichen gesetzt wird, dürfen sogar Anführungszeichen verwendet werden. In Kombination mit mehrzeiligen Werten können so größere Textabschnitte mit Hervorhebungen in die Vorlage eingebettet werden:

    [[!template  id=foo name="Sally" color="grün" age=8 notes="""
    * [[Charley]]s Schwester.
    * Wenn ich groß bin, möchte ich Astronaut werden.
    * Eigentlich 8 1/2.
    """]]

Eine Vorlage anlegen

Die Vorlage ist eine normale Wiki-Seite, die um Unterverzeichnis templates/ des Quellverzeichnisses des Wikis liegt. Der Inhalt der templatebody-Anweisung wird als Vorlage verwendet. Alles außerhalb dieser Anweisung ist nicht Teil der Vorlage und wird üblicherweise zu deren Dokumentation genutzt.

Wenn die Vorlagenseite keine templatebody-Anweisung enthält, wird die komplette Seite als Vorlage verwendet. Dies ist überholt, da es dazu führt, dass der Vorlagen-Inhalt zusätzlich als normale Seite interpretiert wird, während die Seite erzeugt wird.

Alternativ können Vorlagen außerhalb des Wikis gespeichert werden, als Dateien mit der der Erweiterung ".tmpl". Nach diesen wird standardmäßig unter /usr/share/ikiwiki/templates gesucht, wobei mit der Einstellung templatedir ein zuvor zu durchsuchendes Verzeichnis angegeben werden kann. Wenn eine Vorlage außerhalb des Wiki-Quellverzeichnisses angegeben wird, wird der Parameter id nicht als pagespec interpretiert, sodass der vollständige Dateiname der Vorlagenseite inklusive der Endung ".tmpl" angegeben werden muss. Außerdem wird in diesem Fall die templatebody-Anweisung nicht verwendet. Zum Beispiel:

[[!template  id=blogpost.tmpl]]

Die Vorlage nutzt die Syntax des Perl-Moduls HTML::Template, mit der sich recht komplexe Dinge realisieren lassen. Die vollständige Syntax ist in der Dokumentation des Perl-Moduls zu finden, aber es genügt ein paar wenige Dinge zu wissen:

  • Jeder Parameter, welcher der Vorlage übergeben wird, erzeugt eine Vorlagenvariable. Es gibt auch einige vordefinierte Variable wie PAGE und BASENAME.
  • Der Wert einer Variablen kann mit <TMPL_VAR Variable> eingefügt werden. Wiki-Hervorhebungen im Wert werden zuvor nach HTML umgewandelt.
  • Der wörtliche Wert einer Variable kann mit <TMPL_VAR raw_Variable> eingefügt werden; dabei werden Wiki-Hervorhebungen nicht nach HTML umgewandelt.
  • Mit <TMPL_IF Variable>Block</TMPL_IF> wird ein Block nur dann eingefügt, wenn eine Variable gesetzt ist.
  • Mit <TMPL_IF Variable>Block<TMPL_ELSE>anderer Block</TMPL_IF> wird je nachdem ob eine Variable gesetzt ist ein Block oder ein anderer Block eingefügt.

Hier ist eine Beispiel-Vorlage:

    [[!templatebody  <<ENDBODY
    <span class="infobox">
    Name: [[<TMPL_VAR raw_name>]]<br />
    Alter: <TMPL_VAR alter><br />
    <TMPL_IF color>
    Lieblingsfarbe: <TMPL_VAR farbe><br />
    <TMPL_ELSE>
    Keine Lieblingsfarbr.<br />
    </TMPL_IF>
    <TMPL_IF hinweise>
    <hr />
    <TMPL_VAR hinweise>
    </TMPL_IF>
    </span>
    ENDBODY]]

Diese Vorlage beschreibt eine Person. Parameter: name, alter,
farbe (Lieblingsfarbe, optional), hinweise (optional).

Die ausgefüllte Vorlage wird auf die gleiche Weise formatiert wie die Wiki-Seite, welche die Vorlage enthält. Es ist also möglich, in der Vorlage WikiLinks und sonstige Wiki-Anweisungen zu verwenden. Solche WikiLinks tauchen allerdings nicht als Backlinks der Seite auf, welche die Vorlage verwendet.

Zu beachten ist die Verwendung von "raw_Name" im WikiLink-Generator im Beispiel oben. Falls der Name etwas enthält, das für eine Wiki-Hervorhebung gehalten werden könnte, wird das nicht nach HTML umgewandelt, bevor es als WikiLink verarbeitet wird.