{PROJECT} ../../template/home.ini {GRAFIK_LINKS} $home/gifs/li_phpcms.gif {LOGO_1} $home/gifs/cmslogo1.gif {LOGO_2} $home/gifs/cmslogo2.gif {MENU} 00.08.06.02 {TITEL} Template-Datei {CONTENT}
Templates sind mit Dokumentvorlagen für Word-Dokumente oder Power-Point-Vorlagen vergleichbar. Ein Template ist eine normale HTML-Datei in die Ihr Platzhalter für Felder einsetzen könnt.
Die Platzhalter werden dann durch die Inhalte ersetzt, die unter der gleichen Feldbezeichnung in den Content-Dateien stehen. Dadurch wird der Inhalte einer Website vom Layout getrennt. Spätere Layoutänderungen werden am Template durchgeführt und wirken sich auf die gesamte Website aus.
Wir beachten jetzt mal nicht die Projektdatei und die Menü's. Diese Dinge behandeln wir dann bei der Erklärung der Content-Dateien.
Wenn Ihr Grafiken oder Cascaded Style Sheets in HTML-Dateien referenziert, müßt Ihr oft den absoluten Pfad zu der entsprechenden Datei angeben. Das ist störend, wenn Ihr ein Verzeichnis ändern müßt, oder eine Website auf einen anderen Server übertragen wollt. In einem solchen Fall müssen alle absolut gesetzten Pfade in den Template-Dateien korrigiert werden. Das erspart Ihr Euch, wenn Ihr die Variable "$home" in der Projektdatei setzt und in Euren Templates statt dem Absoluten Pfad, diese Variable einsetzt.
Es kann vorkommen, daß man ein bestimmtes Script oder eine Funktion mit dem aktuellen Seitennamen als Parameter ausführen möchte. Zu diesem Zweck ist die Variable "$self" definiert. Sie wird vom Parser automatisch durch den Dateinamen, der momentan angezeigten Datei ersetzt.
Ein einfaches Template kann z.B. so aussehen:
Nehmen wir an, daß in der ersten Content-Seite nach dem Feld {TITEL} die Worte: "Meine erste Homepage mit phpCMS" stehen und nach dem Feldbezeichner {CONTENT} die Worte: "Hier steht überflüssiges Gequassel, das dann in das Template eingesetzt wird.<BR> Ihr könnt zur Formatierung normale HTML-Tags einsetzen. Intelligenter ist es aber, die Formatierung mit eigenen TAGS durchzuführen.".
Der Parser ersetzt dann beim Aufruf der Content-Seite die Platzhalter im Template mit den Werten aus der Content-Seite. Das sieht dann so aus:
So einfach funktioniert phpCMS!
Es kann vorkommen, daß man den selben Inhalt in anderer Form präsentieren will. Beispielsweise wenn man dem Betrachter die Möglichkeit geben möchte, die Seite auszudrucken. In diesem Fall unterstützt phpCMS die Angabe des Templates, mit dem die Seite angezeigt werden soll, in der URL.
Einige Beispiele für einen Aufruf mit Übergabe:
http://mcyra.homeip.net/homepage/doc/doc_de/templates.htm?&template=/homepage/templates/print.tpl
http://mcyra.homeip.net/homepage/doc/doc_de/templates.htm?&template=$home/templates/print.tpl
http://mcyra.homeip.net/homepage/doc/doc_de/templates.htm?&template=unterverz/print.tpl
Die Variable $HOME gibt dabei den Pfad zum Projekt an und wird der Projektdatei entnommen. Alternativ
kann der absolute oder ein relativer Pfad benutzt werden.
Es gibt aber auch einen Nachteile bei der Verwendung von dynamischen Templates: Seiten mit dynamischen Templates werden vom Parser nicht gecached. Diese Seite für den Druck anzeigen.
Wenn Ihr wiederkehrende HTML-Elemente in Euren Templates habt, die aber in allen Seiten gleich sein sollen, verwendet Ihr am besten Sub-Templates. Auch innerhalb der selben Seite (des selben Templates) könnt Ihr mehrmals das selbe Sub-Template angeben.
Am Besten notiert Ihr Sub-Templates in einer eigenen Zeile in Eurem Template. Am Beginn jenes Zeichen, daß Ihr als Feld-Start-Zeichen im Parser eingestellt habt, danach den Feldnamen "TEMPLATE", ein Leerzeichen und dann das Schlüsselwort "FILE=" gefolgt von einem Anführungszeichen. Eure Zeile sieht dann z.B. so aus:
{TEMPLATE FILE="/homepage/templates/sub_template.tpl"}
Der Pfad zur Datei in der das Sub-Template abgelegt ist kann absolut zum Document-Root Eures Webservers, relativ zum Template, aus dem das Subtemplate aufgerufen wurde angegeben werden. Ihr könnt auch die Variable "$home" für die Einbindung benutzen. Valide Angaben sind also z.B.:
{TEMPLATE FILE="/homepage/templates/sub_template.tpl"}
{TEMPLATE FILE="./sub_template.tpl"}
{TEMPLATE FILE="$home/templates/sub_template.tpl"}
Damit "$home" funktioniert müßt Ihr diese Variable auch in der PROJEKT-Datei definiert haben.
Ihr könnt Sub-Templates auch verschachteln, das heißt in einem Sub-Template ein weiteres Sub-Template aufrufen. Dabei müßt Ihr aber darauf achten, daß Ihr keine Rekursion erzeugt, also aus einem Sub-Template das selbe Sub-Template nochmals aufruft.
Abgesehen davon gilt für Sub-Templates alles, was auch für Templates gilt.
Nehmt zum Beispiel meinen Copyright-Text rechts oben auf dieser Seite. Dieser Text ist mit einem e-mail-Link versehen. Der Text kommt auf allen Seiten meiner Homepage vor. Ich verwende aber bei meiner Homepage verschiedene Templates. (Ihr habt Euch vielleicht schon gefragt, wie ich das Wechseln der Grafiken links unter den Sub-Menüs in den einzelnen Kategorien mache? Ganz einfach: Ich habe für jede Kategorie ein Template.)
Wenn sich nun meine e-mail-Adresse ändert, müßte ich ohne den Einsatz von Sub-Templates die neue Adresse in jedem einzelnen Template ändern. Durch meine Sub-Templates ändere ich die e-mail Adresse nur in einem Sub-Template und diese Änderung wirkt sich auf allen Seiten aus.