Autor: Peter Bieling © 2004-2008 - Downloadpaket
Diese kleine Templateklasse mit ihren nur etwa 100 Zeilen Code (ohne Kommentare) hat
alles, was nötig
ist, um PHP-Code und (X)HTML so zu trennen, dass eine problemlose Kooperation von Programmierer
und HTML-Autor möglich ist. Auch wer beides in einer Person ist, wird schnell merken, wie sich
die Anwendung dieses Templatekonzepts positiv auf Übersicht und Entwicklungsgeschwindigkeit auswirkt.
Auf Logik im Template wird komplett verzichtet. Blöcke werden
nicht ineinander verschachtelt dargestellt, sondern untereinander aufgeführt, was die Übersicht
erhöht. HTML-Kommentare dürfen bleiben, was sie sind, und dienen nicht als Steuerzeichen
für Loops.
Die Kommentierung der Templates ist fast genauso leicht möglich, wie die des PHP-Codes.
Diese Templateklasse ist in meinen Projekten seit mehr als drei Jahren im Einsatz und hat sich
dort bestens bewährt.
Die Funktionsweise sollte anhand der kommentierten Beispiele deutlich
werden.
<?php
// Einbindung der Templateklasse:
require_once("pb-tpl.php");
// Instanz der Klasse erzeugen:
$t = new pb_tpl("templates/test1.tpl");
//Die Zuordnung von Variablen und Platzhaltern über
//Key-Value-Paare ist nur eine Methode.
$sere = array (
"title" => "Startseite vom pb-tpl-Tutorial",
"headline" => "PHP-Templates einfach aber effektiv.",
"subline" => "Für alle die den Durchblick behalten wollen.",
"text" => "Diese Template-Klasse verzichtet auf Logik im Template. Dies
ist natürlich nur ein ganz einfaches Beispiel. Auf der nächsten
Seite zeigen wir, wie Daten-Reihen verarbeitet werden können.",
"autor" => "Peter Bieling",
"datum" => "25.11.04"
);
//Die Ausgabe der Seite ist ganz einfach:
echo $t->fill_tpl("main", $sere);
?>
# Die Reihenfolge der Templates ist im Prinzip egal, da sie in ein assoziatives Array
# eingelesen werden.
# Soll eine Zeile ignoriert werden, beginnt sie mit
# Raute oder
; Semikolon. Leere Zeilen werden ebenfalls übersprungen.
# Wird eine Leerzeile benötigt, z.B. für pre-Text oder Textdateien, muss ein
# einzelnes ! Ausrufezeichen in der leer darzustellenden Zeile stehen.
# Whitespace vor dem Kommentarzeichen ist erlaubt.
Kommentierung # in der selben Zeile wird nicht unterstützt.
Vor dem ersten Template-Bezeichner (z.B. [main]) können die Kommentarzeichen auch
weggelassen werden. Ich empfehle aber, sie zu setzen.
# Die Benennung der Templates erfolgt in eckigen Klammern in einer eigenen Zeile
# Whitespace davor und danach wird ignoriert.
# Das Template endet mit der Benennung des nächsten Templates bzw dem Seitenenede.
# Für besondere Fälle, in denen als erstes Zeichen (Whitespace ausgenommen) ein Kommentarzeichen
# stehen muss oder soll (z.B. bei Perl-Code-Kommentaren oder bei CSS-Selektoren), muss das Zeichen
# mit Backslash maskiert werden:
\# Der Backslash wird automatisch entfernt und die übrige Textzeile bleibt erhalten:
\#newsbox {position:absolute; ... usw. }
#Das gleiche gilt auch für Zeilen, die mit [ beginnen und mit ] enden:
\[b]BB-Code soll nicht als Template-Bezeichner angesehen werden[/b]
# und wird daher mit Backslash geschützt.
################ Jetzt aber los:
# Haupttemplate. Ich nenne es normalerweise "main".
[main]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
# Platzhalter werden in geschweifte Klammern gesetzt:
<title>{TITLE}</title>
</head>
<body>
<h1>{HEADLINE}</h1>
<h2>{SUBLINE}</h2>
<p>{TEXT}</p>
<hr noshade size="1">
Autor: {AUTOR} - Datum: {DATUM}
</body>
</html>