All-in-one Include-Tag
Aus APF Wiki [de]
Es kommmt immer wieder die Frage auf, ob es möglich ist, eine Taglib zur Einbindung eines Templates zu haben, in dem alle Taglibs des APF bereits bekannt sind und kein
<core:addtaglib .../>
mehr notwendig ist. Durch die generische Implementierung des Page-Controller ist es zu jeder Zeit möglich, das Verhalten des Aufbaus des APF-DOM-Baumes und die DOM-Elemente selbst zu beeinflussen.
Für diese Aufgabe nutzen wir den bereits vorhandenen Tag <core:importdesign /> als Grundlage und erweitern diesen so, dass er die von uns gewünschten Taglibs zusätzlich zu den bisherigen kennt.
Das funktioniert wir folgt:
class all_taglib_importdesign extends core_taglib_importdesign { public function all_taglib_importdesign(){ $this->__TagLibs[] = new TagLib('tools::form::taglib','html','form'); $this->__TagLibs[] = new TagLib('tools::media::taglib','html','mediastream'); ... $this->__TagLibs[] = new TagLib('my::taglib','all','importdesign'); } }
Dem Konstruktor der Klasse kann man entnehmen, dass die Taglib selbst ebenfalls in der Reihe der bekannten Taglibs erscheint. Dies ist insofern notwendig, als dass der Tag <all:importdesign /> auch in durch den Tag eingebunden Templates bekannt sein soll.
Um den Mechanismus zu nutzen, muss der Tag einmalig im Basis-Template bekannt gemacht und zur Einbindung eines Templates genutzt werden. Anschließend ist der Tag im kompletten Baum verfügbar und die hinzugefügten Tags sind ohne zusätzliche Einbindung bekannt. Dies kann per
<core:addtaglib namespace="..." prefix="all" class="importdesign" /> <all:importdesign namespace="..." template="" />
erledigt werden.