zur 1. Frage
Die Hierachie in den Daten ergibt sich durch die Reihenfolge beim "add" und dem Knotennamen.
Kennt er einen Namen noch nicht, wird eine Unterebene angelegt, ansonsten springt er im Baum wieder zurück bis zu dem Knoten mit diesem Namen, und legt einen neuen Schleifendurchlauf für diesen an.
PHP Code
1
2
3
4
5
6
7
$tpl->add("table",array());
$tpl->add("tr",array());
$tpl->add("td",array("varname"=>"Zelle1.1"));
$tpl->add("td",array("varname"=>"Zelle1.2")); // Knoten "td" bereits vorhanden, daher neuer loop für td
$tpl->add("tr",array()); // Knoten "tr" bereits vorhanden, daher neuer loop für tr
$tpl->add("td",array("varname"=>"Zelle2.1")); // unter dem aktuellen tr, gibt es noch kein td, daher neuer Knoten
$tpl->add("td",array("varname"=>"Zelle2.2")); // Knoten "td" bereits vorhanden, daher neuer loop für td
Blöcke auf der selben fiktiven Ebene, erhalte ich durch setzen des "internen Zeigers"
PHP Code
1
2
3
4
5
6
7
8
$tpl->add("table",array());
$tpl->add("tr",array());
$tpl->add("td",array("varname"=>"Zelle1.1"));
$tpl->add("td",array("varname"=>"Zelle1.2"));
$tpl->set( 'table' ); // zurück zu Knoten "table"
$tpl->add("tr2",array());
$tpl->add("td",array("varname"=>"Zelle1.1"));
$tpl->add("td",array("varname"=>"Zelle1.2"));
Ein springen im Baum "nach unten" ist NICHT möglich (da er die unterliegenden Knoten nicht kennt), aber dies habe ich bisher auch noch nie benötigt.
zur 2. Frage
Beim Evaluieren des Templates zerlegt er dieses in seine einzelnen Blöcke und notiert dabei die Templatehierarchie. D.h. er speichert z.B., das im Template "main" die Untertemplates "head", "content" sowie "foot" enthalten sind.
Beim Zerlegen von "head" notiert er dann munter weiter: enthält "abc", "xyz", ...
zur 3. Frage
Er geht das Datenarray rekursiv mit foreach durch, und prüft jeweils, ob er für die aktuelle Ebene auch ein Template findet (loop-Name von "add" = Name des Templateblocks).
Findet er er einen Templateblock, folgt der rekursive Aufruf, und erst bei der Rükehr aus der Rekursion erfolgt das Füllen. Das hat den Vorteil, das Variablen innerhalb der Hierarchie vererbt werden.
D.h. Variablen welche im obigen Schnipsel bei "table" gesetzt werden, können in "tr", wie auch "td" oder "tr2" genutzt werden.