Der Designer kann in Ruhe ein HTML-Dokument erstellen. An den Stellen, wo später der dynamische Inhalt eingesetzt werden soll, fügt er Variablen/Platzhalter ein. Der Programmierer setzt für diese Variablen Werte ein, und muß sich somit nicht um das Design kümmern. Wenn sich in der HTML-Datei etwas ändert, muß das Script nicht geändert werden - und umgekehrt.
<html> <head> <title>{titel}</title> </head> <body> <h1>{titel}</h1> <p> {inhalt} </p> </body> </html>So könnte ein einfaches Template zum Beispiel aussehen. Als Gegenstück dazu muß vom Programmierer ein Script geschrieben werden, das die Variablen ,,titel`` und ,,inhalt`` mit entsprechenden Werten füllt.
Da wir uns nicht mit regulären Ausdrücken herumschlagen wollen, verwenden wir ein Templatemodul. Ich will in den weiteren Abschnitten zwei solcher Module vorstellen.
<?php include_once "HTML/ITX.php"; // ITX erwartet den Pfad zu den Templates als Parameter $tpl = new IntegratedTemplateExtension("./"); $tpl->loadTemplateFile("template.html"); // Setzen der Variablen $tpl->setVariable("titel", "Test-Template"); $tpl->setVariable("inhalt", "Just a test..."); // Ausgeben $tpl->show(); ?>
<html> <body> <select> <!-- BEGIN option_loop --> <option>{wert}</option> <!-- END option_loop --> </select> </body> </html>Das PHP-Script soll in diesem Fall für jede einzelne Option den gesamten Block einfügen, und für ,,wert`` etwas einfügen.
<?php include_once "HTML/ITX.php"; // ITX erwartet als Parameter den Pfad zu den Template $tpl = new IntegratedTemplateExtension("./"); $tpl->loadTemplateFile("template.html"); // Array aus Optionen $optionen = array( "Option 1", "Option 2", "Noch eine Option", "Wieder eine", "Und die letzte" ); // Auswählen des Blocks $tpl->setCurrentBlock("option_loop"); foreach ($optionen as $wert) { $tpl->setVariable("wert", $wert); // Zuletzt muß der Block nach dem Setzen // der Variable(n) geparsed werden $tpl->parseCurrentBlock(); } // Ausgeben $tpl->show(); ?>
<html> <head> <title>{$titel}</title> </head> <body> <select> {html_options output=$optionen} </select> </body> </html>
Ich habe hier eine kombinierte Version der beiden oberen Beispiele benutzt. Wie man sieht, hat Smarty eine leicht veränderte Syntax für Variablen. Außerdem gibt es schon vorgefertigte Funktionen, wie zum Beispiel ,,html_options``, welche eine Select-Liste erstellt.
<?php include_once "Smarty.class.php"; $smarty = new Smarty; $smarty->assign("titel", "Smarty-Test"); $smarty->assign("optionen", array("Option 1", "Option 2", "Noch eine Option", "Wieder eine", "Und die letzte")); $smarty->display("test.tpl"); // Templates werden bei // Smarty als .tpl gespeichert ?>
Der Titel wird ähnlich wie bei IT[X] in das Template eingefügt. Aus dem Array mit dem Optionen erstellt Smarty direkt eine Select-Liste, was etwas Tipp-Arbeit erspart.
Smarty bietet noch viele weitere Funktionen, wie zum Beispiel eine Art Debugger, der außer einer Angabe, wieviel Zeit zum Parsen benötigt wurde, auch ausgibt, welche Variablen mit welchen Werten belegt wurden. Auch If-Else-Abfragen, Foreach-Schleifen und Include-Direktiven sind kein Problem. Allerdings stellt man sich bei der Fülle an Funktionen manchmal die Frage, ob man nicht gleich den PHP-Code in die HTML-Datei einbetten sollte, da die Templates oft sehr unübersichtlich werden.