Rolf B: PlugIn Manager entwickeln

Beitrag lesen

Hallo MB,

es ist letztlich egal, ob Du das Template in PHP oder mit Mitteln einer Template-Engine schreibst. Wichtig ist die Trennung zwischen Business- und Ausgabelogik, und die hast Du.

Ob Du tatsächlich spezifische Klassen für Table, TableRow, TableCell etc brauchst, dann kann man diskutieren. Eventuell führt das ins over-engineering. Ein OOP-Template muss zwei Dinge können:

  • sich an den Datenstrukturen des Business- oder Viewmodels entlanghangeln
  • einige HTML Bausteine ausgeben können: Elemente ohne Inhalt (<img>), Elemente mit leerem Inhalt (<div />, Elemente mit Inhalt (<form>, </form>) und Inhalt hineinsetzen, Attribute an Elemente kleben sowie Text ausgeben. Korrekter Kontextwechsel inbegriffen.

D.h. letztlich läuft es auf die Grundbausteine der EDV hinaus: Sequenz, Alternative und Iteration.

Das führt dann dazu, dass Du einen Objektbaum aus Template-Objekten aufbaust, der deine Ausgabe beschreibt, und dann die render-Methode der Baumwurzel aufrufst. Der Rest entwickelt sich dann von selbst. Das ist aber nicht unbedingt effizient. PHP muss die Klassen laden, du musst sie instanziieren, erst dann kannst Du ausgeben. Sowas ist gut, wenn man den geladenen Baum mehrfach verwenden kann, aber genau das geht in PHP ja nicht. Für jeden neuen Web-Request wird der Speicher geputzt.

Deswegen ist ein in PHP programmiertes Template, das Du bei Bedarf einfach mit include einbindest, die bessere Lösung.

Ich hab mal gegoogelt - guck mal was Ian Burris macht. Der bettet es sogar in eine Klasse ein und das includete Template hantiert dann auf $this->... herum. Kann man machen, muss man nicht. Es muss nur eine Konvention geben, was der includete Code vorzufinden erwartet.

Ein anderes Beispiel für diese Idee ist Smarty. Da gibt's zwar eine eigene Templatesprache, aber Smarty "kompiliert" das beim ersten Verwenden in PHP und führt dann dieses PHP aus. Das Smarty-Objekt bekommt ein Array mit Daten-Elementen, die dann im Template zur Verfügung stehen. Damit ist das Template strikt vom Rest des Codes getrennt und kann auf nichts zugreifen, was ihm nicht erlaubt ist. Gerade, wenn Templates von Dritten gebaut werden, kann das interessant sein.

Rolf

--
sumpsi - posui - clusi