What is Smarty?
Why use it?
Use Cases and Work Flow
Syntax Comparison
Template Inheritance
Best Practices
Crash Course
You may use the Smarty logo according to the trademark notice.
For sponsorship, advertising, news or other inquiries, contact us at:
Ein Template kann aus verschiedenen Quellen bezogen werden. Wenn Sie ein Template mit 'display()' ausgeben, die Ausgabe mit 'fetch()' in einer Variablen speichern oder innnerhalb eines Template ein weiteres Template einbinden, müssen Sie den Ressourcen-Typ, gefolgt von Pfad und Template-Namen angeben. Wenn kein Resourcetyp angegeben wird, wird $default_resource_type verwendet.
Templates aus dem '$template_dir' benötigen normalerweise keinen Ressourcen-Typ, es wird jedoch empfohlen 'file:' zu verwenden. Übergeben Sie einfach den Pfad, in dem sich das Template relativ zu '$template_dir' befindet.
Example 15.6. Templates aus '$template_dir' verwenden
// im PHP-Skript $smarty->display("index.tpl"); $smarty->display("admin/menu.tpl"); $smarty->display("file:admin/menu.tpl"); // entspricht der vorigen Zeile {* im Smarty Template *} {include file="index.tpl"} {include file="file:index.tpl"} {* entspricht der vorigen Zeile *}
Templates ausserhalb von '$template_dir' benötigen den 'file:' Ressourcen-Typ, gefolgt von absolutem Pfadnamen und Templatenamen.
Example 15.7. Templates aus beliebigen Verzeichnissen benutzen
// im PHP-Skript $smarty->display("file:/export/templates/index.tpl"); $smarty->display("file:/path/to/my/templates/menu.tpl"); {* im Smarty Template *} {include file="file:/usr/local/share/templates/navigation.tpl"}
Wenn Sie auf einer Windows-Maschine arbeiten, enthalten absoluten Dateipfade normalerweise den Laufwerksbuchstaben (C:). Stellen Sie sicher, dass alle Pfade den Ressourcen-Typ 'file:' haben, um Namespace-Konflikten vorzubeugen.
Example 15.8. Templates aus Windows Dateipfaden verwenden
// im PHP-Skript $smarty->display("file:C:/export/templates/index.tpl"); $smarty->display("file:F:/path/to/my/templates/menu.tpl"); {* im Smarty Template *} {include file="file:D:/usr/local/share/templates/navigation.tpl"}
Sie können Templates aus jeder für PHP verfügbaren Datenquelle beziehen: Datenbanken, Sockets, LDAP, usw. Dazu müssen sie nur ein Ressource-Plugin schreiben und registrieren.
Konsultieren Sie den Abschnitt über Ressource-Plugins für mehr Informationen über die Funktionalitäten, die ein derartiges Plugin bereitstellen muss.
Achtung: Sie können die interne file
Ressource nicht
überschreiben. Es steht Ihnen jedoch frei, ein Plugin zu schreiben,
das die gewünschte Funktionalität implementiert und es als alternativen
Ressource-Typ zu registrieren.
Example 15.9. Eigene Quellen verwenden
// im PHP-Skript // definieren Sie folgende Funktion in Ihrer Applikation function db_get_template ($tpl_name, &tpl_source, &$smarty_obj) { // Datenbankabfrage um unser Template zu laden, // und '$tpl_source' zuzuweisen $sql = new SQL; $sql->query("select tpl_source from my_table where tpl_name='$tpl_name'"); if ($sql->num_rows) { $tpl_source = $sql->record['tpl_source']; return true; } else { return false; } } function db_get_timestamp($tpl_name, &$tpl_timestamp, &$smarty_obj) { // Datenbankabfrage um '$tpl_timestamp' zuzuweisen $sql = new SQL; $sql->query("select tpl_timestamp from my_table where tpl_name='$tpl_name'"); if ($sql->num_rows) { $tpl_timestamp = $sql->record['tpl_timestamp']; return true; } else { return false; } } function db_get_secure($tpl_name, &$smarty_obj) { // angenommen alle Templates sind sicher return true; } function db_get_trusted($tpl_name, &$smarty_obj) { // wird für Templates nicht verwendet } // Ressourcen-Typ 'db:' registrieren $smarty->register_resource("db", array("db_get_template", "db_get_timestamp", "db_get_secure", "db_get_trusted")); // Ressource im PHP-Skript verwenden $smarty->display("db:index.tpl"); {* Ressource in einem Smarty Template verwenden *} {include file="db:/extras/navigation.tpl"}
Sie können eine Funktion definieren, die aufgerufen wird, wenn ein Template nicht aus der angegeben Ressource geladen werden konnte. Dies ist z. B. nützlich, wenn Sie fehlende Templates on-the-fly generieren wollen.
Example 15.10. Standard Template-Handler verwenden
<?php // fügen Sie folgende Zeilen in Ihre Applikation ein function make_template ($resource_type, $resource_name, &$template_source, &$template_timestamp, &$smarty_obj) { if( $resource_type == 'file' ) { if ( ! is_readable ( $resource_name )) { // erzeuge Template-Datei, gib Inhalte zurück $template_source = "This is a new template."; $template_timestamp = time(); $smarty_obj->_write_file($resource_name, $template_source); return true; } } else { // keine Datei return false; } } // Standard Handler definieren $smarty->default_template_handler_func = 'make_template'; ?>