Smarty Template Engine
Die Template Engine Smarty ist eine PHP-Bibliothek unter der LGPL. Sie ermöglicht bei der Entwicklung von Webapplikationen die Trennung von Code und Ausgabe. Die Ausgabe ist meist HTML kann aber jedes textbasierte Dateiformat sein XML, LATEX usw... .
Smarty Basic
Smarty hat im Angebot der Templatesysteme eine kleine Besonderheit. Es verarbeitet Templates nicht in zwei sondern in drei Schritten. Dies produziert auf den esten Blick ein wenig overhead beschleunigt die verarbeitung von Scripen wesentlich. Die meisten Systeme Funktionieren auf dem Prinzip Ausdruck suchen und ersetzen (Ein Bsp. Listing 1).
Listing 1 - Simpel Beispiel
foo.php
<?php $tpl_var_foo = 'bar'; $tpl_file = 'foo.tpl.html'; $tpl = implode(' ',file($tpl_file)); $tpl = preg_replace("'#foo#'i",$tpl_var_foo,$tpl); echo $tpl; ?>
foo.tpl.html
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>ein Simpler Test</title> </head> <body> <h1>Der Simpler Test</h1>
<p>Hier sollte jetzt der Inhalt aus $tpl_var_foo echscheinen: <strong>#foo#
</body> </html>
Ausgabe von foo.php
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>ein Simpler Test</title> </head> <body> <h1>Der Simpler Test</h1> <p>Hier sollte jetzt der Inhalt aus $tpl_var_foo echscheinen: <strong>foo</strong></p> </body> </html>
Smarty setzt das HTML-Template erst nach PHP um. D.H. aus leicht verständlichem (auch für Webdesigner) HTML wird ein gemisch aus PHP und HTML. Dieses ergebnis wird in einer seperaten Datei Abgespeichert. Solange sich das HTML Template nicht änder wird dies auch nicht mehr geparst sondern direkt das erzeugte PHP-Skript erzeugt.
Listing 2 - Simpel Beispiel mit Smarty
foo.php
<?php require_once('/home/rothbe/public_html/smarty_vortrag/Smarty-2.6.13/libs/Smarty.class.php'); $tpl_var_foo = 'bar'; $tpl_file = 'foo.tpl.html'; $smarty = new Smarty; $smarty->assign('foo',$tpl_var_foo); // SMARTY CONFIG $smarty_home = '/home/rothbe/public_html/smarty_vortrag/smarty_simple/'; $smarty->template_dir = $smarty_home.'templates'; $smarty->compile_dir = $smarty_home.'templates_c'; // >> ENDE SMARTY CONFIG << $smarty->display($tpl_file); ?>
templates/foo.tpl.html
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>ein Simple Test</title> </head> <body> <h1>Der Simple Test</h1>
<p>Hier sollte jetzt der Inhalt aus $tpl_var_foo echscheinen: <strong>{$foo}
</body> </html>
aus templates/foo.tpl.html macht Smarty beim ersten ausruf die Datei templates_c/%%E9^E9C^E9C15D49%%foo.tpl.html.php
<?php /* Smarty version 2.6.13, created on 2006-04-22 02:06:28 compiled from foo.tpl.html */ ?> <?php echo '<?xml'; ?> version="1.0" encoding="utf-8"<?php echo '?>'; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>ein Simple Test</title> </head> <body>
<h1>Der Simple Test
<p>Hier sollte jetzt der Inhalt aus $tpl_var_foo echscheinen: <strong><?php echo $this->_tpl_vars['foo']; ?>
</body> </html>
Die Ausgabe an den Browser ist die Selbe wie in Listign 1
Programmieren mit Smarty
Grundlegende Syntax im HTML Template
Smarty Funktionen und Variablen werden in der Regel mit { } umschlossen alles dazwischen wird von der Smarty Classe interpretiert.
Kommentare
Um Kommentare im HTML Quelltext zu hinterlegen nutzt man folgende Sysntax
{* Dies ist ein einzeiliger Kommentar *}
{* dies ist ein mehrzeiliger Kommentar. *}
Variablen
Variablen beginnen immer wie auch in PHP mit einem $
{$foo} <-- Zeigt einfache Variable an (kein Array oder Objekt) {$foo[4]} <-- Zeigt 5. Element von einem Array an, deren Schlussel bei 0 beginnen {$foo.bar} <-- Zeigt das Element zum Schlüssel "bar" des Arrays an (wie PHPs $foo['bar']) {$foo.$bar} <-- Zeigt das Element eines variablen Schlüssels an (wie PHPs $foo[$bar]) {$foo->bar} <-- Zeigt eine Eigenschaft "bar" des Objekts $foo an {$foo->bar()} <-- Zeigt den Rückgabewert der Objectmethode "bar" an {#foo#} <-- Zeift die Konfigurationsvariable "foo" an {$smarty.config.foo} <-- Synonym für {#foo#} {$foo[bar]} <-- Syntax zum zugriff auf Element in einer Section-Schleife, siehe {section} {assign var=foo value="baa"}{$foo} <-- Gibt "baa" aus, siehe {assign} (Quelle Smarty Dokumentation)
neben den Oben gezeigten gibt es noch weitere zugelassene Schreibweisen siehe dazu Smarty Dokumentation
neben den Variablen gibt es Variablen die von Smarty automatisch zur Verfügung gestellt werden. z.B. $smarty.get oder $smarty.post dabei kann man auf übergebene Variablen von Formularen oder GET Parameter zugreifen. z.B.:
{$smarty.post.foo}
Weitere Smarty Variablen sind:
- $smarty.cookies
- $smarty.server
- $smarty.env
- $smarty.session --> eq $_SESSION
- $smarty.request --> eq $_REQUEST
- $smarty.now --> Aktueller Zeitstempel eq time()
- $smarty.version
und viele weitere siehe dazu Smarty Dokumentation
Funktionen und Modifikatoren
Inerhalb von einem Smarty Template stehen eine Reihe von Funktionen und Modifikatoren zur verfügung. alle im Über blick unter http://www.smarty.net/manual/de/language.modifiers.php und http://www.smarty.net/manual/de/language.builtin.functions.php
"Eingebaute Funktionen"
IF und ELSE Abfragen
mit {if},{elseif},{else} können aufgrund von zugwiesenen Template Variablen IF und ELSE Abfragen durchgeführt werden.
Listing 3