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
undBASENAME
. - 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.