DOC
Die Template-Dateien sind nichts anderes, als normale HTML-Dateien, die jedoch zusätzlich spezielle Tags enthalten, die - im Gegensatz zu HTML-Tags - in geschweifte Klammern ({, }) gesetzt werden. Falls ein Tag ungültig sein sollte, wird er schlichtweg ignoriert und mit dem restlichen Dokument ausgegeben.
DOC
Um eine Variable auszugeben, schreibt man einfach einen Tag, der die Variable enthält. Eine Variable wird durch ein Dollarzeichen $ und dem Namen der Variable gekennzeichnet. Optional kann man noch den ->html-Modifier anfügen, was das maskieren von HTML-Entities bewirkt.
Beispiel
{$variable}
{$variable->html}
Jede Variable wird automatisch in eine String-Variable umgewandelt. Falls die Variable eine Array-Variable ist, so wird die Anzahl an Elementen ausgegeben.
Es ist auch möglich, auf Teile von Arrays zuzugreifen. Dazu muss der Index des Arrays in eckige Klammern ([, ]) gesetzt werden. Der ->html-Modifier wird nach der schließenden eckigen Klammer gesetzt.
Beispiel
{$variable[0]}
{$variable[0]->html}
Arrays können beliebig viele Dimensionen haben. Man schreibt einfach mehrere eckige Klammern hintereinander:
Beispiel
{$variable[0][1]}
{$variable[0][3][5][7]->html}
Um auf Hashes zuzugreifen, muss der Schlüssel der Hash-Variable in eckige Klammern gesetzt werden:
{$variable["schluessel"]}
{$variable["schluessel"]->html}
Hashes können auch beliebig verschachtelt werden und auch mit Array gemischt:
{$variable["autor"]["name"]}
{$variable[0]["autoren"][1]["name"]->html}
Beachten Sie:
Falls eine Variable nicht existiert, ein Array-Unterelement nicht existiert, ein Hash-Schlüssel nicht existiert oder eine Variable kein Array oder Hash ist, wird an der Stelle des Tags nichts ausgegeben.
Bei Variablen wird zwischen Groß- und Kleinschreibung unterschieden!
DOC
Innerhalb der Template ist es problemlos möglich, einer Variablen einen neuen Wert zuzuweisen. Dazu schreibt man einen Tag, der mit einer Variable beginnt, daraufhin ein einzelnes Gleichheitszeichen enthält und schließlich den neuen Wert der Variable. Folgende Arten der Zuweisungen sind möglich:
| Zuweisung |
Erläterung |
{$variable = "text"} |
Der Variable variable wird der String text zugewiesen. variable ist daraufhin eine Stringvariable. |
{$variable = 0} |
Der Variable variable wird die Zahl 0 zugewiesen. variable ist daraufhin eine Integervariable. |
{$variable = $a} |
Der Variable variable wird der Wert der Variable a zugewiesen. variable ist daraufhin vom gleichen Typ wie a. |
{$variable = "text"+$a+"weiterer text"} |
Der Variable variable wird der String "text", gefolgt von dem Wert der Variable a (in ein String umgewandelt), gefolgt von dem String "weiterer text" zugewiesen. variable ist daraufhin eine Stringvariable. |
{$variable = ["hallo","spencer"]} |
Der Variable variable wird ein Array zugewiesen, der aus zwei Strings, hallo und spencer besteht. variable ist daraufhin eine Arrayvariable. |
{$variable = [42,54]} |
Der Variable variable wird ein Array zugewiesen, der aus zwei Integern, 42 und 54 besteht. variable ist daraufhin eine Arrayvariable. |
{$variable = ["name" => "jonas", "alter" => 22]} |
Der Variable variable wird ein Hash zugewiesen, der aus einem Integer und einem String besteht. variable ist daraufhin eine Hashvariable. |
{$variable = [[0,"hallo"],[1,"spencer"]]} |
Der Variable variable wird ein mehrdimensionaler Array zugewiesen, der in der zweiten Ebene aus jeweils einem Integer und einem String besteht. variable ist daraufhin eine Arrayvariable. |
{$variable = ["hallo",[1,["ja"],"spencer"]]} |
Der Variable variable wird ein mehrdimensionaler Array zugewiesen, der eine recht komplexe Struktur besitzt. variable ist daraufhin eine Arrayvariable. |
{$variable = ["hallo",$a]} |
Der Variable variable wird ein Array zugewiesen, das einen String sowie den Inhalt einer anderen Variable a enthält. variable ist daraufhin eine Arrayvariable. |
Beachten Sie:
Es ist nicht möglich, eine Variable zu erstellen, die gleichzeitig ein Hash und ein Array ist:
{$variable = ["a", "b" => "c"]}
Dieses Konstrukt ist ungültig. Ob eine Variable ein Hash oder ein Array sein soll, entschiedet der Parser beim ersten Element.
DOC
Mit dem {if}-Tag kann man Bedingungen in der Template abfangen. Dabei gilt generell folgende Struktur:
{if BEDINGUNG}
{elseif ANDERE_BEDINGUNG}
{else}
{endif}
Alles, was zwischen {if BEDINGUNG} und {elseif ANDERE_BEDINGUNG} steht, wird angezeigt (und ausgeführt), wenn BEDINGUNG wahr ist. Falls dies nicht der Fall ist, jedoch ANDERE_BEDINGUNG wahr sein sollte, wird alles zwischen {elseif ANDERE_BEDINGUNG} und {else} angezeigt. Und falls ANDERE_BEDINGUNG auch nicht wahr sein sollte, wird alles zwischen {else} und {endif} angezeigt.
Es ist egal, ob {elseif} {else if} oder {elsif} verwendet wird.
Folgende Bedingungen sind möglich:
| Bedingung |
Erläterung |
{if $variable} |
Ist wahr, falls die Variable variable existiert. |
{if !$variable} |
Ist wahr, falls die Variable variable nicht existiert. |
{if $variable == 4} |
Ist wahr, falls die Variable variable, umgewandelt in Integer, die Zahl 4 ergibt. |
{if $variable != 4} |
Ist wahr, falls die Variable variable, umgewandelt in Integer, nicht die Zahl 4 ergibt, sich nicht in Integer umwandeln lässt oder nicht existiert. |
{if $variable == "text"} |
Ist wahr, falls die Variable variable, umgewandelt in String, den Wert text ergibt. |
{if $variable != 4} |
Ist wahr, falls die Variable variable, umgewandelt in String, nicht den Wert text ergibt, sich nicht in String umwandeln lässt oder nicht existiert. |
{if $variable[0] == $zweite_variable} |
Ist wahr, falls das erste Element der Array-Variable variable gleich der Variablen zweite_variable ist. Zum Vergleich zweier Variablen siehe unten. |
Vergleich zweier Variablen:
Ein positiver Vergleich (==) zwischen zwei Variablen ist immer dann wahr, wenn:
- Beide Variablen existieren. Falls ein Element eines Array abgefragt wird, muss die Variable ein Array sein und das gewünschte Element existieren.
- Beide Variablen gleichen Typs sind und den gleichen Wert besitzen (im Falle eines Arrays wird lediglich die Anzahl der Elemente verglichen, nicht jedoch der Inhalt) oder
- Der Wert der linken Variable, umgewandelt in den Typ der rechten Variable, gleich dem Wert der rechten Variable ist. Falls die rechte Variable ein Array ist, ist dieser Vergleich nie wahr, da eine Umwandlung nach Array nicht möglich ist.
Ein negativer Vergleich (!=) zwischen zwei Variablen ist immer dann wahr, wenn ein entsprechender positiver Vergleich (==) falsch wäre.
Bei einem Vergleich zwischen einer Variable und etwas anderem wird die Variable immer in den Typ des anderen umgewandelt.
Vergleiche zwischen zwei festen Strings ({if "hallo" == "hallo"}), zwei festen Zahlen ({if 1 == 1}) oder zwischen einem String und einer Zahl ({if "hallo" == 0}) sind zwar möglich, werden allerdings vom Template-Parser bereits während des Kompilierens ausgewertet. Bei dem Vergleich einer Zahl mit einem String wird der linke Vergleichspartner in den Typ des rechten Vergleichspartners umgewandelt; {if "hallo" == 0} wäre also wahr, {if 0 == "hallo"} dagegen nicht.
Konstrukte wie {if 0}, {if 1} oder {if "hallo"} sind nicht möglich und führen dazu, dass der Tag ignoriert wird.
Bedingungen mit Iteratoren werden gesondert behandelt.
DOC
Um eine andere Template-Datei einzubinden, kann der {include}-Tag genutzt werden.
Beispiel
{include "andere.html"}
Das Einbinden der anderen Template-Datei erfolgt zur Laufzeit, allerdings muss als Name der einzubindenden Datei der ursprüngliche Name verwendet werden. In der eingebundenen Template stehen die gleichen Variablen zur Verfügung, wie in der einbindenden Template. Alle Zuweisungen an Variablen, die in der eingebundenen Template vorgenommen werden, haben auch auf die einbindende Template Auswirkungen.
DOC
Eine Arrayvariable kann in einer Schleife durchgegangen werden.
Beispiel
{foreach $array_variable as $variable}
{$variable}
{endforeach}
Erläuterung:
In diesem Beispiel wird alles, was zwischen dem {foreach}- und {endforeach}-Tag steht, so oft ausgegeben, wie die Variable array_variable Elemente hat. Für jeden Schleifendurchgang wird eine Variable variable erstellt, die das aktuelle Element enthält. In diesem Beispiel würden schlichtweg alle Elemente aus array_variable ausgegeben.
Es ist möglich, Schleifen zu verschachteln.
DOC
Iteratoren geben Aufschluss über den Zustand einer Schleife. Im Moment sind drei verschiedene Iteratoren definiert:
| Iterator |
Bedeutung |
@first |
Besitzt den Wert 1, wenn dies der erste Durchgang durch eine Schleife ist, ansonsten 0. |
@last |
Besitzt den Wert 1, wenn dies der letzte Durchgang durch eine Schleife ist, ansonsten 0. |
@iterator |
Der Wert ist um 1 geringer, als die Nummer des aktuellen Durchgangs der Schleife. Beim ersten Druchgang wäre @iterator also 0, beim zweiten 1, beim dritten 2, usw. |
Iteratoren sind nur innerhalb von Schleifen gültig, außerhalb von Schleifen werden die Tags, die sie enthalten, ignoriert.
Bei verschachtelten Schleifen kann man angeben, auf welche Schleife sich der Iterator beziehen soll. Dazu fügt man ein paar eckige Klammern mit einer Zahl an den Iterator an. Falls man dies nicht tut bezieht sich der Iterator immer auf die innerste Schleife.
| Iterator |
Bedeutung |
@iterator[0] |
Bezieht sich auf die äußerste Schleife. |
@first[1] |
Bezieht sich auf die zweitäußerste Schleife. |
@last[2] |
Bezieht sich auf die drittäußerste Schleife. |
@first[-1]
@iterator |
Bezieht sich auf die innerste Schleife. |
@last[-2] |
Bezieht sich auf die zweitinnerste Schleife. |
Iteratoren können direkt ausgegeben werden:
{@iterator}
{@first[-1]}
Da Iteratoren zwangsläfig Zahlen sind, ist es ungültig, den ->html-Modifier anzufügen.
Iteratoren können auch an Zuweisungen zu Variablen teilnehmen; die entsprechende Variable ist dann vom Typ Integer:
{$variable = @iterator}
{$variable = [@first[-2],@last[-2]]}
Iteratoren können auch in Bedingungen verwendet werden:
| Bedingung |
Erläuterung |
{if @iterator} |
Wenn der Wert von iterator nicht 0 ist, ist die Bedingung wahr. |
{if !@first} |
Wenn der Wert von first 0 ist, ist die Bedingung wahr. |
{if @iterator == 2} |
Vergleiche zwischen Iteratoren und Variablen, andere Interatoren, Integern und Strings sind auch möglich, siehe unten. |
Vergleiche mit Iteratoren:
Bei einem Vergleich mit Iteratoren werden alle Vergleichspartner immer in Integer verwandelt. Danach wird verglichen, ob die Werte übereinstimmen. Wenn man beispielsweise eine Arrayvariable mit einem Iterator vergleicht, wird also die Anzahl an Elementen mit dem Wert des Iterators verglichen.
Iteratoren und Includes:
Iteratoren sind immer nur lokal in einer Templatedatei verfügbar. Wenn man einen {include}-Tag innerhalb von einer Schleife hat, dann stehen die Iteratoren nicht in der eingebundenen Datei zur Verfügung.