Templates

1. Bedeutung von Templates

Das Adventure PHP Framework (APF) kennt mehrere Bedeutungen des Begriffs Template:

  • Templates dienen als Grundlage für die HMVC-Pattern-Implementierung des Page-Controller. Dieser baut die DOM-Baum-Struktur an Hand von Template-Dateien (HTML-Dateien) oder Tags auf und ermöglicht dem Entwickler so, die Oberfläche einer Webseite oder Applikation dynamisch und gemäß den Anforderungen zu gestalten.
  • Als Templates werden ebenfalls wiederverwendbare Elemente innerhalb von Template-Dateien bezeichnet. Ein bekannter Vertreter ist der <html:template />-Tag, der zur bedingten Ausgabe von Inhalten innerhalb von Templates sowie der Ausgabe von sich wiederholenden Inhalten genutzt werden kann.

Die Definition des MVC-Pattern beschreibt die Bedeutung der Komponenten Model, View und Controller. Das HMVC-Pattern definiert eine hierarchische Struktur von MVC-Elementen, die in der Implementierung des APF basierend auf Template-DOM-Knoten aufgebaut wird. Der Page-Controller nutzt dafür die Informationen, die in den Template-Dateien enthalten sind und erzeugt daraus Kind-Elemente des aktuellen Knoten.

Jedem Template, bzw. jedem Knoten des HMVC-DOM-Baumes, kann ein (Document-)Controller gemäß der Definition des MVC-Pattern zugeordnet werden.

2. Aufbau von Templates

Template-Dateien beinhalten drei Typen von Inhalten:

  • APF-Tags (z.B. <html:placeholder />)
  • HTML-Code (z.B. <p>...</p>)
  • Beliebiger Text

Tags sind dem APF-Parser bekannte XML-Tags der Form <prefix:name />. Sie können eine beliebige Anzahl von Attributen der Form attribute="value" besitzten. Explit schließende Tags haben weitere Tags oder einfachen Text als Inhalt.

HTML-Code und beliebiger Text dienen der Gestaltung des Inhalte einer Webseite oder Applikation und werden vom APF-Parser nicht weiter verarbeitet. Sie können daher sowohl als Attribute von Tags als auch als Inhalte verwendet werden.

Bitte beachten Sie, dass der APF-Parser HTML-Code in Attributen nur verarbeiten kann, wenn darin keine Anführungszeichen (") enthalten sind.

Innerhalb von APF-Tags können Sie prinzipiell beliebigen HTML-Code platzieren, solange dieser konsistent ist und die Schachtelung von Tags nicht stört.

Details zum APF-Parser erfahren Sie unter Implementierung von Tags.

2.1. Template-Dateien

Template-Dateien werden im Adventure PHP Framework zum Aufbau der UI einer Webseite oder Applikation genutzt und der Front-Controller wird stets mit einem initialen Template gestartet.

Innerhalb einer Template-Datei können APF-Tags (siehe Standard TagLibs), HTML-Code oder beliebiger Text platziert werden. Im einfachsten Fall enthält ein Template - z.B. das initiale Template - das Grundgerüst der Webseite oder Applikation und definiert Platzhalter für dynamische Inhalte oder bindet weitere Templates ein. Zur Ausgabe von dynamischen Inhalten kann ein Template einen (Document-)Controller referenzieren, der bei der Transformation ausgeführt wird.

Das folgende Code-Beispiel beinhaltet das Grundgerüst einer Webseite:

APF-Template
<@controller class="VENDOR\pres\controller\MainController" @> <!DOCTYPE html> <html> <head> <title><html:placeholder name="title" /></title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <header> <h1><html:placeholder name="title" /></h1> <core:importdesign namespace="VENDOR\pres\templates" template="navi" /> </header> <div id="content"> <core:importdesign namespace="VENDOR\pres\templates" template="content" /> </div> <footer> <core:importdesign namespace="VENDOR\pres\templates" template="footer" /> </footer> </body> </html>

Das Template definiert zwei Platzhalter-Tags, die über den Controller MainController gefüllt werden und bindet über drei <core:importdesign />-Tags weitere Templates ein, die sich um die Navigation, den Inhalt und den Footer kümmern.

Eine Liste von bekannten Tags finden Sie unter Standard TagLibs bzw. Spezielle Tags. Das Tutorial Implementierung von Tags erläutert Ihnen, wie Sie die Tags und Funktionen des APF für Ihre Webseite oder Applikation erweitern können.

Neben den klassischen Template-Funktionen werden auf der Seite Erweiterte Template-Funktionen zusätzliche Funktionen wie beispielsweise eine Kurzschreibweise für Platzhalter und eine Syntax für Zugriff auf Objekte aus einem Template beschrieben.

2.2. HTML Templates

HTML Templates dienen zur Definition von wiederverwendbaren HTML-Fragmenten um beispielsweise Inhalte unter bestimmten Bedindungen darzustellen oder Listen zu erzugen. Es empfiehlt sich, je Element ein Template zu erstellen, das vom Controller verwendet werden kann. HTML Templates werden nicht direkt am Platz ihrer Definition ausgegeben, sondern sind nur Struktur-Elemente die zur Generierung von Inhalten genutzt werden können.

Die folgende Code-Box zeigt ein HTML Template, das zur Ausgabe einer dynamischen Tabelle genutzt werden kann:

APF-Template
<@controller class="VENDOR\pres\controller\ListController" @> <table> <thead> <tr> <td>Frage</td> <td>Antwort</td> </tr> </thead> <tbody> <html:placeholder name="table-rows" /> </tbody> </table> <html:template name="table-row"> <tr> <td><html:placeholder name="question" /></td> <td><html:placeholder name="answer" /></td> </tr> </html:template>

Das Template beinhaltet den Rumpf der auszugebenden Tabelle und der <html:template />-Tag definiert die sich wiederholende Zeile der Tabelle. Zur Generierung der Inhalte kann folgender Controller genutzt werden:

PHP-Code
use APF\core\pagecontroller\BaseDocumentController; class ListController extends BaseDocumentController { public function transformContent() { $row = $this->getTemplate('table-row'); $buffer = ''; foreach ($this->getItems() as $item) { $row->setPlaceHolder('question', $item->getQuestion()); $row->setPlaceHolder('answer', $item->getAnswer()); $buffer .= $row->transformTemplate(); } $this->setPlaceHolder('table-rows', $buffer) } /** * @return FaqEntry[] */ private function getItems() { ... } }
Templates, die nicht für die Generierung von Listen oder sich wiederholenden Inhalten eingesetzt werden, können direkt an der Stelle der Definition ausgegeben werden. Nutzen Sie hierzu die Methode transformOnPlace() im Document-Controller. Beispiel:
PHP-Code
class MainController extends BaseDocumentController { public function transformContent(){ $tmpl = &$this->getTemplate('template-name'); $tmpl->transformOnPlace(); } }

Um die Ausgabe von Listen zu vereinfachen, können Sie Platzhalter auch direkt befüllen. Hierzu lassen sich zwei Funktionalitäten kombinieren: mit dem dritten Parameter der Methode setPlaceHolder() kann weiterer Inhalt zu einem Platzhalter hinzugefügt werden und das TemplateTag untertützt die direkte Ausgabe, da es innerhalb der __toString()-Methode das Template automatisch transformiert.

Die Implementierung des Controllers kann damit wie folgt vereinfacht werden:

PHP-Code
use APF\core\pagecontroller\BaseDocumentController; class ListController extends BaseDocumentController { public function transformContent() { $row = $this->getTemplate('table-row'); foreach ($this->getItems() as $item) { $row->setPlaceHolder('question', $item->getQuestion()); $row->setPlaceHolder('answer', $item->getAnswer()); $this->setPlaceHolder('table-rows', $row, true); } } /** * @return FaqEntry[] */ private function getItems() { ... } }

Kommentare

Möchten Sie den Artikel eine Anmerkung hinzufügen, oder haben Sie ergänzende Hinweise? Dann können Sie diese hier einfügen. Die bereits verfassten Anmerkungen und Kommentare finden Sie in der untenstehenden Liste.
Für diesen Artikel liegen aktuell keine Kommentare vor.