Verwendung und Bearbeitung von Templatefiles
... oder
Die saubere Trennung von Script (php) und Text (html)
Fast jeder, der seine Seiten mit php erstellt, kennt das Problem: Der Quelletext ist ein Wirrwarr aus php-Befehlen und HTML-Code (der dann seinerseits mit Backslash maskierte Anführungszeichen enthält, usw...).
Ein einfacher Ausweg aus diesem Problem ist es, HTML-Code (also das Design der Seite) in einer seperaten Datei - nennen wir sie mal template_index.html - abzuspeichern. Diese Datei enthält HTML-Header, Layout und den Seiteninhalt. Sie ist eigentlich eine ganz normale HTML-Seite, wie sie jeder Browser gerne hat. Damit man nun den Vorteil von PHP ausnützen kann, nämlich die Erstellung von dynamischen Webseiten, schreibt man nun in diese Templatedatei an den gewünschten Stellen Platzhalter/Codewörter, welche dann von dem php-Script durch den gewünschten Inhalt ersetzt werden. Fie fertige Seite wird dann mit EINEM EINZIGEN echo-Befehl ausgegeben. Soviel zur Theorie - hier die praktische Umsetzung:
Man nehme eine html-Datei mit Namen template_index.html die so aussieht:
<html>
<head>
<titel>%TITEL%</titel>
</head>
<body>
%SEITENINHALT%
</body>
</html>
%TITEL% und %SEITENINHALT% sind hier die Platzhalter für den später einzufügenden Text.
Im php-Script wird die Templatedatei dann einfach mit fopen und fread eingelesen:
$tempfilehandler = @fopen ("template_index.html", "r");
$templatecontent = fread ($tempfilehandler, filesize ("template_index.html"));
fclose ($tempfilehandler);
Jetzt enthält der String $templatecontent die gesamte Seite.
Um nun die Platzhalter mit Inhalt zu ersetzen verwendet man die Funtkion ereg_replace, die einen bestimmten Substring in einem String sucht, und diesen durch einen anderen String (welcher auch leer sein darf) ersetzt. Im Beispiel sieht das dann so aus:
$titel = "Mein Seitentitel";
$inhalt="<h1>Seiteninhalt</h1>\n";
for($i=0;$i<3;$i++) $inhalt .= $i."<br>\n";
$replace = ereg_replace("%TITEL%", $titel, $templatecontent);
$replace = ereg_replace("%SEITENINHALT%", $inhalt, $replace);
NACHDEM alle Platzhalter ersetzt worden, kann der String nun einfach mit echo ausgegeben werden und gut ist:
echo $replace;
Die Ausgabe an den Browser ist dann:
<html>
<head>
<titel>Mein Seitentitel</titel>
</head>
<body>
<h1>Seiteninhalt</h1>
0<br>
1<br>
2<br>
</body>
</html>
Auf diesem Weg kann außerdem das gesamte Layout einer Webpräsenz in einem einzigen File gemacht werden, während der Inhalt der einzelnen Seiten wieder in anderen Files abgelegt wird (oder in einer Datenbank, wer's mag). Mit Hilfe eines einzigen php-files kann Seitenlayout und Seiteninhalt zusammengefügt und ausgegeben. So läßt sich z.B. ein einfaches Wechseln der Sprachen realisieren oder einfach Framesets ersetzen. Durch die Verwendung von css-files kann dann sogar das Aussehen der Seite noch von verschiedenen Benutzern umgeschaltet werden, indem php verschiedene css-filenamen einfügt (siehe www.csszengarden.com) ...