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
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]]
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 />
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).
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.