Template Parser mit PHP
ieses Tutorial zeigt euch wie ihr mit nur wenig Aufwand eure eigene Templates Dateien benutzt und variable Werte einfügen könnt. Dazu schreibe ich erstmal eine sehr kleine Templates Klasse die mir nur das Laden einer Datei übernimmt.
<?php
class tpl
{
function get($name)
{
$filename=“/tpl/$name.tpl”;
$fd=fopen($filename,“r”);
$co=fread($fd,filesize($filename));
fclose($fd);
return $co;
}
}
$tpl = new tpl;
?>Wie ihr erkennen könnt brauchen wir einen neuen Ordner namens “tpl” in denen wir alle unsere Templates im Format “name.tpl” reinspeichern. Als Beispiel nehme ich drei Dateien:
-head.tpl
-body.tpl
-foot.tpl
Der Inhalt der Dateien
head.tpl
<html>
<head><title>{title}</title></head>
<body>body.tpl
Heute ist der {datum}! Wir haben {uhr} Uhr.foot.tpl
</body>
</html>Es ist nicht viel Inhalt in diesen Datei, doch es reicht um das Verständnis dieses Tutorials zu vermitteln. Wie ihr sicher bemerkt habt, gibt es so genannte Platzhalte in diesen Dateien. Diese Platzhalter habe ich mit einer geschweiften Klammer gekennzeichnet.
Jetz brauchen wir eine PHP Datei die alle drei Templates öffnet und in einer Variable Speichert. Zum Glück haben wir ja vorher die Klasse geschrieben. Diese erleichtert uns nun eine menge Schreibarbeit.
<?php
// Lade der Template Klasse:
require “templates_class.php”;
$head = $tpl->get(“head”);
$body = $tpl->get(“body”);
$foot = $tpl->get(“foot”);
// Variablen zusammenfassen
$output = $head.$body.$foot;
echo
$output;
?>Nun haben wir es fast geschafft. Doch das Wichtigste fehlt leider! Unsere Platzhalter sind immer noch unverändert. Wir könnten nun ganz einfach mit den Befehl str_replace() unsere Variablen austauschen… Doch das bringt uns leider viel zu viel Arbeit! Wir schreiben eine universelle Lösung die überall platz findet und keiner Modifikation bedarf - egal wie sich das Projekt entwickelt.
Wir erstellen eine Datei namens parse.php und schreiben folgendes hinein:
<?php
$gesamt=preg_match_all(“/\{([^.\}]*)\}/i”,$ipost,$ergebniss);
for($g=0;$g<$gesamt;$g++)
{
$new=str_replace(“{”,“”,$ergebniss[0][$g]);
$new=str_replace(“}”,“”,$new);
$ipost=str_replace($ergebniss[0][$g],$$new,$ipost);
}
?>Was diese Datei nun in einzelnen macht ist schnell erklärt. Zu Beginn suchen wir alle Platzhalter über ein Regulären Ausdruck. In der For Schleife gehen wir nun alle gefundenen Namen durch und ersetzen diesen Namen mit der gleichnamigen Variable! Jetzt brauchen wir nur noch unsere Index Datei anpassen und wir sind fertig!
<?php
// Lade der Template Klasse:
require “templates_class.php”;
$head = $tpl->get(“head”);
$body = $tpl->get(“body”);
$foot = $tpl->get(“foot”);
// Variablen zusammenfassen
$output = $head.$body.$foot;
$title = “Meine Homepage”;
$datum = “22.05.2005″;
$uhr = “22.23 Uhr”;
// Variablen parsen!
$ipost = $output;
require “parse.php”;
$output = $ipost;
// Ausgabe
echo $output;
?>Damit wären wir fertig! Ich hoffe das mit diesen zwei Grundfunktionen nun auch ihr auf ein Template System umsteigt. Den es ist einfach Sauberer PHP Code mit HTML zu trennen.
Nicht schlecht … werde ich gleich mal testen … Danke!