Templates mit PHP

Dieses Tutorial beschreibt in mehreren Teilen wie man Templates in PHP verwendet. Ferner erhält man eine Einführung in die Entwicklung eines eigenen Templatesystems.

Templates mit PHP

1 Einleitung in das Tutorial & diesen Teil
1.1 Was sind Templates?
1.2 Wie kann man Templates verwenden?
1.3 Grundzüge des Templateeinsatzes in PHP
1.4 Was sollte ich für die kommenden Teile des Tutorials bereits wissen?
1.5 Vorschau

1 Einleitung

Viele, die sich mit Webdesign und/oder Webprogrammierung beschäftigen kennen vermutlich eine der folgenden Situationen:

  • Man hat eine Website entwickelt, nur im Laufe der Zeit verbessern sich die eigenen designerischen Fähigkeiten oder der Geschmack.
  • Man entwickelt an einer größeren Applikation und merkt, dass man langsam nicht mehr durch das eigene Codedurcheinander von HTML und PHP Code durchschaut.

Sicherlich gibt es noch unzählige andere Möglichkeiten, wo der Einsatz von Templates sinnvoll ist, aber alle aufzuzählen, wäre wohl ein bisschen zu viel an dieser Stelle!

In diesem Teil des Tutorials gehe ich auf die Grundzüge von Templates, Verwendung und deren Sinn und Zweck ein. In den nächsten Tutorials werden die ersten Templatefunktionen erstellt und deren Verwendung erklärt. Des weiteren gehen ich auf die verschiedenen Verwaltungs- und Speichermöglichkeiten ein und es entsteht die erste (einfache!) Templateklasse, mit der sich bereits arbeiten lässt. Zum Schluss werde ich noch auf einige (ausgewählte) fertige Templatesysteme eingehen und kurz deren Verwendung und Möglichkeiten beschreiben.

Zu diesem Teil und den kommenden Teilen ist zu sagen, dass ich versuchen werde, mich vorrangig an Programmierer zu wenden, die mit der Materie wenig bis gar nicht vertraut sind. Deswegen wird der ein oder andere Codeteil etwas ausführlicher beschrieben werden und das Templatesystem nicht die Komplexität erreichen (zumindest in den geplanten Teilen nicht, aber man soll niemals nie sagen!! ;) ), wie es viele der Templatesysteme bieten, die im Internet erhältlich sind! Das vorrangige Ziel dieses mehrteiligen Tutorials wird es sein, unbedarften Usern etwas Appetit auf dieses sehr interessante Thema zu machen und einen Lerneffekt zu erzielen. Nun aber genug meines Geschwafels, fangen wir an!

1.1 Was sind Templates?

Mit Templates hat man die Möglichkeit, den Code und das Design seiner Seite voneinander zu trennen. Beim Parsen der Templates werden die HTML-Seiten vom PHP-Interpreter analysiert und die Platzhalter (z.B.: , Erklärung hierzu später!) innerhalb der Seiten durch Werte ersetzt, die von uns an den Templateparser übergeben werden (z.B.: Daten aus einer Datenbank). Nach der Analyse und dem Einfügen der gewünschten Informationen werden die geparsten Seiten (fertiger HTML-Code) an den Browser ausgegeben. Den eigentlichen Templates (Datenbank oder Dateisystem) widerfahren keine Änderungen!!

1.2 Wie kann man Templates verwenden?

Durch den Einsatz von Templates kann der Entwickler die HTML-Seiten erstellen, Tabellen/Grafiken einfügen, ohne sich über spätere PHP-Skripte Gedanken machen zu müssen. Ein weiterer Vorteil der Trennung von PHP-/ und HTML-Code ist, dass man auch mit Leuten Entwickeln kann, die keine Kenntnisse von PHP besitzen und nur für Design und Layout zuständig sind.

Vorab schon mal ein Beispielskript, wie so etwas aussehen könnte:

        <html>
      <head>
      <title>Templates</title>
      </head>
      <body>
      <h1></h1>
      <p></p>
      </body>
      </html>
      
Das dazu passende PHP-Skript könnte so aussehen:


        <?php
/* Include-Pfad zu Templateklasse */
include("/mein/Pfad/zur/klasse/template.inc.php");

/* Initialisierung der Templateklasse */
$tpl = new Template;

/* Templatedatei bestimmen */
$tpl->_useFile(array("meineDatei" => "meineDatei.tpl");

/* Werte für die Platzhalter bestimmen */
$tpl->_useVar( array( "UEBERSCHRIFT" =>  $ueberschrift,
            
"TEXT" => $text ) );

/* Template parsen */
$tpl->_parseTpl("OUT","meineDatei");

/* geparstes Template an den ausgeben */
$tpl->fTpl("OUT");
?>
      

Damit würde (wenn wir eine funktionierende Templateklasse hätten) die HTML-Datei geparst werden und unsere beiden PlatzhalterXX von unserer Klasse für die Ausgabe ersetzt werden.

1.3 Grundzüge des Template-Einsatzes in PHP

Wie 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.
Das Grundprinzip ist es ja, die Platzhalter zu finden und etwas damit anzufangen. Aber erst mal ein paar Beispiele wie mögliche Platzhalter aussehen könnten:

Einfache Platzhalter:


  • steht für eine Variable, die eingesetzt wird => $tabelle
  • borderleft getrennt wird nach ":"
    steht für ein Array, welches eingesetzt wird =>$iv['borderleft']

Komplexere Platzhalter (Schleifen)

- array:row:open:0 getrennt wird nach ":"
1 => steht für einen Schleifentyp (hier einfach mal eine While-Schleife)
array => hier können verschiedene Sachen definiert sein. Array steht für die Abfrage einer Datenbank, also mysql_fetch_array($result0). $result wird standartmäßig als "Ergebnis definiert", zur "0" weiter unten!
row => steht für die Variable, in welche die Ergebnisse der Abfrage gelegt werden $row0 (hier gilt das selbe wie für $result0)
open => hiermit definieren wir das Öffnen der Schleife
0 => einfach ein Label (durchgehende Nummerierung ineinander verschachtelter Schleifen), das es ermöglicht auch verschachtelte Schleifen zu bauen

jetzt haben wir die Schleife geöffnet, natürlich muss sie auch geschlossen werden:
array:row:close:0

also hätten wir jetzt folgendes Konstrukt:
while ($row0 = mysql_fetch_array($result0)) {

} Wie man sieht, ist man so in der Lage, sich auch komplexe Schleifenstrukturen zu bauen:

array:row:open:0
Username
array:row:open:1
hobby
array:row:close:1
array:row:close: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 ;).

1.4 Was sollte ich für die kommenden Teile des Tutorials bereits wissen?

Dieser Abschnitt ist mehr oder weniger einer der Knackpunkte von Templatesystemen... Wie bereits gesehen, können Templatesysteme mitunter sehr komplex werden und auch die Programmierung wird sicherlich noch komplizierter! Nehmen wir uns mal das System mit den Schleifen vor:

Schleifen (und auch noch verschachtelt) arten in der Programmierung in einer wahren Arrayflut aus, schließlich muss ich meinen Code dahingehen offen halten, das nicht nur eine Schleife kommt, sonder auch mehrere möglich sind, ich muss also dafür sorgen, dass das der Parser wie in einem Baum die Möglichkeit hat, in die Struktur hineinzugehen und auch wieder herauszukommen.

Wenn wir die Bedingungen zusammenfassen (die Grundkenntnisse lasse ich an dieser Stelle einfach mal weg!):

  • Array (auch mehrdimensional)
  • Schleifen und Bedingungskonstrukte
  • Funktionen
  • Klassen/OOP (allerdings erst später)
  • Stringbearbeitung
  • PCRE (Regular Expression Functions - Perl-Compatible

1.5 Vorschau

Im zweiten Teil des Tutorials wird das erste eigene Templatesystem erstellt. Die ersten Funktionen entstehen und am Ende steht eine erste bereits lauffähige Möglichkeit, mit Templates zu arbeiten.

Ich hoffe, der 1. Teil des Tutorials war interessant und hat vielleicht sogar schon die ein oder andere Sache klargestellt oder erläutert?? Für Fragen oder Kritik bin ich jederzeit im Forum unter http://www.php-resource.de/forum zu erreichen (Username: MoRtAlAn)

Erfahrungen

Es sind noch keine Kommentare vorhanden.

Hier Kannst Du einen Kommentar verfassen


Bitte gib mindestens 10 Zeichen ein.
Wird geladen... Bitte warte.
* Pflichtangabe

Verwandte Beiträge

Wird geladen... Bitte warte.
Wird geladen... Bitte warte.

Tutorial veröffentlichen

Tutorial veröffentlichen

Teile Dein Wissen mit anderen Entwicklern weltweit

Du bist Profi in deinem Bereich und möchtest dein Wissen teilen, dann melde dich jetzt an und teile es mit unserer PHP-Community

mehr erfahren

Tutorial veröffentlichen