Templatates "von Hand" parsen

Neben den herkömmlichen Methoden, die die Template-Dateien weitgehend automatisch verarbeiten, haben Sie auch die Möglichkeit, die Template-Dateien sozusagen "von Hand" zu verarbeiten. Sie haben hierbei genaue Kontrolle über die zu ersetzenden Variablen, die zu verarbeitenden {IF}-Blöcke usw.

Um eine Variable sofort durch Text zu ersetzen, können Sie die Methode fillin() verwenden:

# PHP / Perl:

$tpl->fillin(Variablenname,Wert);

# Python:

tpl.fillin(Variablenname,Wert)

Sie haben weiterhin die Möglichkeit, mit Hilfe der Methode fillin_array() eine Variable durch ein Array zu ersetzen (unter Perl können Sie eine Array-Referenz verwenden). Dabei werden die einzelnen Array-Elemente zusammengefügt. Die Syntax dieser Methode entspricht der von fillin(), Sie können als optionalen dritten Parameter die Zeichenkette angeben, mit der die Array-Elemente verbunden werden sollen (die Vorgabe ist eine leere Zeichenkette, also '').

Wenn Sie die Variablen mit set_var() definiert haben und diese im Template-Text nun nacheinander durch die definierten Werte ersetzen möchten, so wie es ein Aufruf von parse() tut, können Sie die Methode replace_vars() verwenden:

# PHP / Perl:

$tpl->replace_vars();

# Python:

tpl.replace_vars()

Optional können Sie hier noch ein Array als Parameter mitgeben, das die Variablen, die ersetzt werden sollen, einschränkt. Wird ein Array mitgegeben, werden nur die Variablen ersetzt, deren Namen sich in diesem Array befinden.

Genauso können Sie auch mit den {IF}-Blöcken verfahren:

# PHP / Perl:

$tpl->parse_if_block(Name,Bedingung);

# Python:

tpl.parse_if_block(Name,Bedingung)

Verneinte Blöcke werden automatisch verarbeitet. Wenn Sie den optionalen dritten Parameter von parse_if_block() auf true setzen, werden diese Blöcke nicht verarbeitet.

Falls Sie die Verarbeitung einer Schleife von Hand anstoßen möchten, können Sie die Methode parse_loop() verwenden:

# PHP / Perl:

$tpl->parse_loop(Name der Schleife);

# Python:

tpl.parse_loop(Name der Schleife)

Die Daten für die Schleifen werden allerdings weiterhin durch add_loop_data() und set_loop_data() eingefügt.

Um die mit Hilfe von {DEFINE}-Anweisungen definierten Variablen auszulesen, können Sie die Methode get_defined_vars() verwenden:

# PHP / Perl:

$tpl->get_defined_vars();

# Python:

tpl.get_defined_vars()

Dadurch werden die Variablen ausgelesen und in den Objekt-Eigenschaften abgespeichert, so als wären sie mit set_var() gesetzt worden. Sie Können Sie dann mit get_var() wieder auslesen. Die Namen aller Variablen, die in der Template-Datei definiert wurden, befinden sich in den Objekt-Eigenscaften im Array mit dem Namen defined_vars (unter Perl handelt es sich um eine Array-Referenz).

{INCLUDE}-Anweisungen können, wie bereits erwähnt, von parse_includes() verarbeitet werden:

# PHP / Perl:

$tpl->parse_includes();

# Python:

tpl.parse_includes()

Falls Sie die {TRIM}-Anweisungen manuell verarbeiten lassen möchten, steht die Methode parse_trim_blocks zur Verfügung:

# PHP / Perl:

$tpl->parse_trim_blocks();

# Python:

tpl.parse_trim_blocks()

Zusätzlich zu den normalen {IF}-Blöcken steht noch eine ältere Variante zur Verfügung. Diese soll eigentlich nicht mehr verwendet werden, da sie nicht soviele Möglichkeiten bietet und gerade bei HTML-Dokumenten für Unübersicht sorgen kann. Der Vollständigkeit halber führe ich sie aber trotzdem hier auf, zumal sie vielleicht nützlich sein kann, sollte der Parser für die normalen {IF}-Blöcke einen Bug aufweisen, die bei dieser alten Methode nicht auftritt.

Konkret werden bei dieser Variante bedingte Blöcke von HTML-Tags mit frei wählbaren Namen (eigentlich wohl eher XML, die ganzen Freaks werden mich jetzt ganz sicher verprügeln...) umschlossen - die Variante trägt deswegen auch den Namen "CondTag".
Das kann zum Beispiel so aussehen:

<Name>Das ist ein bedingter Abschnitt!</Name>

Auch hier ist es möglich, mehrere Blöcke ineinander zu verschachteln. Allerdings darf ein CondTag-Block nicht einen weiteren CondTag-Block mit dem selben Namen enthalten, weil die Funktion ansonsten ins Schleudern gerät.

Verarbeitet werden die Blöcke von der Funktion parse_condtag():

# PHP / Perl:

$tpl->parse_condtag(Name,Bedingung);

# Python:

tpl.parse_condtag(Name,Bedingung)

Zur Übersicht


© 2002-2011 Patrick Canterino

Homepage: http://www.patshaping.de/
E-Mail: patrick@patshaping.de