PHP Tutorial: Templates mit PHPDieses Tutorial beschreibt in mehreren Teilen wie man Templates in PHP verwendet. Ferner erhält man eine Einführung in die Entwicklung eines eigenen Templatesystems.
3
![]() 4 1.3 Grundzüge des Template-Einsatzes in PHPWie in 1.2 gesehen, befinden sich in der HTML-Datei Vorgaben des Typs "". Dies sind die Platzhalter, nach denen unser Templatesystem während des Parser-Vorganges sucht und die ersetzt werden. Wenn man sich die Quelltexte verschiedener Applikationen (Foren, CMS, etc.) ansieht, stellt man fest, das die dortigen Templatesysteme von dem hier gezeigten abweichen. Das Grundprinzip ist allerdings bei allen gleich, die Unterschiede liegen nur in der Funktionalität. Bei sehr komplexen Templatesystemen ist es noch möglich, durch diese Art der Platzhalter einfache und verschachtelte Schleifen und Bedingungen darzustellen, das Ganze würde aber den Rahmen für die kommenden Tutorials sprengen (Aber wie bereits gesagt, bei entsprechender Nachfrage kann ich mir dazu gerne was einfallen lassen!). Wie funktioniert so etwas?Das Herzstück eines jeden Templatesystems ist der Parser, der den HTML-Code generiert. Dieser ist wie oben schon gesagt je nach Einsatzwunsch und gewünschten Funktionen sehr unterschiedlich von der Komplexität.
Komplexere Platzhalter (Schleifen) - array:row:open:0 getrennt wird nach ":"
jetzt haben wir die Schleife geöffnet, natürlich muss sie auch geschlossen werden:
also hätten wir jetzt folgendes Konstrukt: array:row:open:0 Hier hätte ich eine While-Schleife in einer anderen While-Schleife, die Variablen wären differenziert ansprechbar (durch das Label) und ich könnte jederzeit auf die Variablen beider Schleifen zugreifen Ein Beispiel für das obere Konstrukt wäre z.B.: Ich lasse mir alle User auflisten, und zu jedem User sein(e) Hobby(s). Natürlich kann man sich viele weitere Dinge einfallen lassen, allerdings sollte man sich vorher recht genau vorstellen können, was brauche ich an Templatefunktionen und vor allem, wie bringe ich möglichst viele Dinge unter einen Hut! Es bringt schließlich nichts, wenn man von zig Platzhaltern erschlagen wird, wenn man einige hätte zusammenfassen können (wie bei den Schleifen, 1=> while, 2=> for, etc...) Ein weiteres Kriterium ist auch, dass man ja das Templatesystem entwickelt hat, um Leuten ohne Programmierkenntnissen eine Zusammenarbeit durch Aufgabenteilung zu ermöglichen! Was habe ich davon, wenn ich meinen Designer mit kryptischen Templatecodes in den Wahnsinn treibe, wenn er PHP eh schon für eine antike Sprache hält ;) Die Arbeit die der Parser verrichtet ist in erster Linie Stringbearbeitung, die Interpretation des Codes und die Ausführung des Codes als PHP-Code. Das Handwerkszeug für die Stringbearbeitung sind Reguläre Ausdrücke und die PHP-Funktion eval(). Wer ins Manual schaut wird dort lesen, dass diese Funktion den an sie übergebenen String als PHP-Code ausführt. Abgesehen von der Tatsache, dass der übergebene Code syntaktisch korrekt sein muss kommt dem Sicherheitsaspekt hierfür eine große Bedeutung zu, schließlich will man ja nicht, dass die User PHP-Code auf dem eigenen Web ausführen können. Deswegen ist während der Arbeit am Templatesystem darauf zu achten, dass keine Sicherheitslücken durch Variablen entstehen, durch die der User Code zur Interpretation eingeben kann. Zu den Regulären Ausdrücken ist zu sagen, dass man sich hauptsächlich auf das Finden der Platzhalter und deren Umsetzung in PHP-Code befasst. Funktionen wie str_replace und andere Stringfunktionen eignen sich für den Einsatz in Templates selten und wenn, dann meistens nur in speziellen Fällen, da man Kriterien zum Finden/Bearbeiten/Ersetzen nicht allgemein vorgeben kann, sonder nur fest definieren kann. Man kann mit Schleifen und Suchkriterien die Stellen im String finden, an der das gewünschte Zeichen steht, aber wer schreibt freiwillig X Zeilen, wenn man es in einer erledigen kann ;).
|
Über den Autor
Tutorial bewertenHat Ihnen dieses Tutorial gefallen? Dann bewerten Sie es jetzt! Fünf Sterne bedeutet "Sehr gut", ein Stern "Unzureichend". aktuelle Artikel
|