mirror of
https://github.com/smarty-php/smarty.git
synced 2025-10-08 02:01:00 +02:00
2773 lines
104 KiB
Plaintext
2773 lines
104 KiB
Plaintext
<!-- Smarty German Documentation Port -->
|
|
<!-- $Id$ -->
|
|
<!-- $Author$ -->
|
|
<!-- $Revision$ -->
|
|
|
|
<part id="smarty.for.programmers">
|
|
<title>Smarty für Programmierer</title>
|
|
<chapter id="smarty.constants">
|
|
<title>Konstanten</title>
|
|
<para></para>
|
|
|
|
<sect1 id="constant.smarty.dir">
|
|
<title>SMARTY_DIR</title>
|
|
<para>
|
|
Definiert den absoluten Systempfad zu den Smarty Klassendateien. Falls
|
|
der Wert nicht definiert ist, versucht Smarty ihn automatisch zu ermitteln.
|
|
Der Pfad muss mit einem '/'-Zeichen enden.
|
|
</para>
|
|
<example>
|
|
<title>SMARTY_DIR</title>
|
|
<programlisting>
|
|
|
|
// Pfad zum Smarty Verzeichnis setzen
|
|
define("SMARTY_DIR","/usr/local/lib/php/Smarty/");
|
|
|
|
require_once(SMARTY_DIR."Smarty.class.php");</programlisting>
|
|
</example>
|
|
</sect1>
|
|
</chapter>
|
|
|
|
<chapter id="api.variables">
|
|
<title>Variablen</title>
|
|
|
|
<sect1 id="variable.template.dir">
|
|
<title>$template_dir</title>
|
|
<para>
|
|
Definiert das Standard-Template Verzeichnis. Wenn
|
|
sie beim Einbinden von Templates keinen Ressourcen-Typ übergeben,
|
|
werden sie in diesem Pfad gesucht. Normalerweise lautet er './templates'.
|
|
Das heisst, Smarty erwartet das Template-Verzeichnis im selben Verzeichnis
|
|
wie das ausgeführte PHP-Skript.
|
|
</para>
|
|
<note>
|
|
<title>Technische Bemerkung</title>
|
|
<para>
|
|
Dieses Verzeichnis sollte ausserhalb der DocumentRoot
|
|
des Webservers liegen.
|
|
</para>
|
|
</note>
|
|
</sect1>
|
|
<sect1 id="variable.compile.dir">
|
|
<title>$compile_dir</title>
|
|
<para>
|
|
Definiert das Verzeichnis, in das die kompilierten Templates geschrieben
|
|
werden. Normalerweise lautet es './templates_c'.
|
|
Das heisst, Smarty erwartet das Kompilier-Verzeichnis im selben Verzeichnis
|
|
wie das ausgeführte PHP-Skript.
|
|
</para>
|
|
<note>
|
|
<title>Technische Bemerkung</title>
|
|
<para>
|
|
Diese Einstellung kann als relativer oder als absoluter Pfad
|
|
angegeben werden. 'include_path' wird nicht verwendet.
|
|
</para>
|
|
</note>
|
|
<note>
|
|
<title>Technische Bemerkung</title>
|
|
<para>
|
|
Dieses Verzeichnis sollte ausserhalb der DocumentRoot
|
|
des Webservers liegen.
|
|
</para>
|
|
</note>
|
|
</sect1>
|
|
<sect1 id="variable.config.dir">
|
|
<title>$config_dir</title>
|
|
<para>
|
|
Dieses Verzeichnis definiert den Ort, an dem die von den
|
|
Templates verwendeten Konfigurationsdateien abgelegt sind. Normalerweise
|
|
ist dies './configs'. Das bedeutet, Smarty erwartet das
|
|
Konfigurations-Verzeichnis im selben Verzeichnis wie das ausgeführte
|
|
PHP-Skript.
|
|
</para>
|
|
<note>
|
|
<title>Technische Bemerkung</title>
|
|
<para>
|
|
Dieses Verzeichnis sollte ausserhalb der DocumentRoot
|
|
des Webservers liegen.
|
|
</para>
|
|
</note>
|
|
</sect1>
|
|
<sect1 id="variable.plugins.dir">
|
|
<title>$plugins_dir</title>
|
|
<para>
|
|
Definiert das Verzeichnis in welchem Smarty die zu ladenden Plugins sucht.
|
|
Normalerweise ist dies 'plugins' im SMARTY_DIR Pfad. Wenn Sie einen relativen
|
|
Pfad angeben, wird Smarty zuerst versuchen das Plugin von SMARTY_DIR aus zu erreichen,
|
|
danach relativ zum aktuellen Verzeichnis (mit 'cwd' - current working directory)
|
|
und zum Schluss in jedem Eintrag des PHP-'include_path'.
|
|
</para>
|
|
<note>
|
|
<title>Technische Bemerkung</title>
|
|
<para>
|
|
Für optimale Performance ist es sinnvoll, 'plugins_dir'
|
|
absolut oder relativ zu SMARTY_DIR bzw. dem aktuellen Verzeichnis zu definieren.
|
|
Von der Definition des Verzeichnisses im PHP-'include_path' wird abgeraten.
|
|
</para>
|
|
</note>
|
|
</sect1>
|
|
<sect1 id="variable.debugging">
|
|
<title>$debugging</title>
|
|
<para>
|
|
Aktiviert die <link linkend="chapter.debugging.console">Debugging Konsole</link>.
|
|
Die Konsole besteht aus einem Javascript-Fenster, welches Informationen zum
|
|
momentan geladenen Template und den zugewiesenen Variablen enthält.
|
|
</para>
|
|
</sect1>
|
|
<sect1 id="variable.debug.tpl">
|
|
<title>$debug_tpl</title>
|
|
<para>
|
|
Definiert den Namen des für die Debugging Konsole verwendeten Template. Normalerweise
|
|
lautet er 'debug.tpl' und befindet sich im <link linkend="constant.smarty.dir">SMARTY_DIR</link> Verzeichnis.
|
|
</para>
|
|
</sect1>
|
|
<sect1 id="variable.debugging.ctrl">
|
|
<title>$debugging_ctrl</title>
|
|
<para>
|
|
Definiert Alternativen zur Aktivierung der Debugging Konsole.
|
|
NONE verbietet alternative Methoden. URL aktiviert ds Debugging,
|
|
wenn das Schlüsselwort 'SMARTY_DEBUG' im QUERY_STRING gefunden wird.
|
|
Wenn '$debugging' auf 'true' gesetzt ist, wird dieser Wert ignoriert.
|
|
</para>
|
|
</sect1>
|
|
<sect1 id="variable.global.assign">
|
|
<title>$global_assign</title>
|
|
<para>
|
|
Definiert eine Liste von Variablen die jedem Template automatisch
|
|
zugewiesen werden. Dies ist nützlich falls man globale beziehungsweise Server-Variablen,
|
|
zuweisen will, ohne dies von Hand zu tun. Jedes Element in '$global_assign' sollte
|
|
entweder den Namen der zuzuweisenden Variablen enthalten, oder Schlüssel/Wert-Paare,
|
|
bei welchen der Schlüssel den Namen des globalen Arrays definiert und der
|
|
Wert den Array mit den zuzuweisenden Werten. '$SCRIPT_NAME' wird immer zugewiesen und
|
|
aus '$HTTP_SERVER_VARS' bezogen.
|
|
</para>
|
|
<note>
|
|
<title>Technische Bemerkung</title>
|
|
<para>
|
|
Server-Variablen können über die '$smarty'-Variable
|
|
erreicht werden, zum Beispiel: {$smarty.server.SCRIPT_NAME}.
|
|
Konsultieren sie den Abschnitt zu <link linkend="language.variables.smarty">$smarty</link>
|
|
für weiterführende Informationen.
|
|
</para>
|
|
</note>
|
|
</sect1>
|
|
<sect1 id="variable.undefined">
|
|
<title>$undefined</title>
|
|
<para>
|
|
Definiert den Wert von '$undefined' für Smarty. Normalerweise ist
|
|
dieser Wert 'null'. Momentan wird er nur verwendet, um nicht definierten
|
|
Elementen aus '$global_assign' einen Standardwert zuzuweisen.
|
|
</para>
|
|
</sect1>
|
|
<sect1 id="variable.autoload.filters">
|
|
<title>$autoload_filters</title>
|
|
<para>
|
|
Filter die Sie zu jedem Template laden möchten, können Sie mit Hilfe
|
|
dieser Variable festlegen. Smarty wird sie danach automatisch laden. Die Variable
|
|
enthält ein assoziatives Array, in dem der Schlüssel den Filter-Typ
|
|
und der Wert den Filter-Namen definiert. Zum Beispiel:
|
|
<informalexample>
|
|
<programlisting>
|
|
$smarty->autoload_filters = array('pre' => array('trim', 'stamp'),
|
|
'output' => array('convert'));
|
|
</programlisting>
|
|
</informalexample>
|
|
</para>
|
|
</sect1>
|
|
<sect1 id="variable.compile.check">
|
|
<title>$compile_check</title>
|
|
<para>
|
|
Bei jedem Aufruf der PHP-Applikation überprüft Smarty,
|
|
ob sich das zugrundeliegende Template seit dem letzten Aufruf
|
|
geändert hat. Falls es eine Änderung feststellt,
|
|
wird das Template neu kompiliert. Seit Smarty 1.4.0 wird
|
|
das Template - falls es nicht existiert - kompiliert, unabhängig
|
|
davon welcher Wert '$compile_check' hat. Normalerweise ist der
|
|
Wert dieser Variable 'true'. Wenn eine Applikation produktiv
|
|
eingesetzt wird (die Templates ändern sich nicht mehr), kann
|
|
der 'compile_check'-Schritt entfallen. Setzen Sie dann
|
|
'$compile_check' auf 'false', um die Performance zu steigern.
|
|
Achtung: Wenn Sie '$compile_check' auf 'false' setzen und anschliessend
|
|
ein Template ändern, wird diese Änderung *nicht* angezeigt.
|
|
Wenn caching und 'compile_check' eingeschaltet sind, werden die
|
|
gecachten Skripts neu kompiliert, sobald eine Änderung an
|
|
einem der eingebundenen Templates festgestellt wird.
|
|
Siehe auch <link linkend="variable.force.compile">$force_compile</link>
|
|
und <link linkend="api.clear.compiled.tpl">clear_compiled_tpl</link>.
|
|
</para>
|
|
</sect1>
|
|
<sect1 id="variable.force.compile">
|
|
<title>$force_compile</title>
|
|
<para>
|
|
Veranlasst Smarty dazu die Templates bei jedem Aufruf neu
|
|
zu kompilieren. Diese Einstellung überschreibt '$compile_check'.
|
|
Normalerweise ist dies ausgeschaltet, kann jedoch für die Fehlersuche
|
|
nützlich sein. In einem Produktiven-Umfeld sollte auf
|
|
die Verwendung verzichtet werden. Wenn caching eingeschaltet ist,
|
|
werden die gecachten Dateien bei jedem Aufruf neu kompiliert.
|
|
</para>
|
|
</sect1>
|
|
<sect1 id="variable.caching">
|
|
<title>$caching</title>
|
|
<para>
|
|
Definiert ob Smarty die Template-Ausgabe cachen soll. Normalerweise ist dies
|
|
ausgeschaltet (disabled, Wert: 0). Falls Ihre Templates redundante Inhalte erzeugen,
|
|
ist es empfehlenswert caching einzuschalten. Die Performance wird signifikant verbessert.
|
|
Sie können auch mehrere Caches für ein Template haben. Die Werte 1 und 2 aktivieren
|
|
caching. Bei 1 verwendet Smarty die Variable '$cache_lifetime', um zu berechnen
|
|
ob ein Template neu kompiliert werden soll. Der Wert 2 weist Smarty an, den Wert von
|
|
'cache_lifetime' zur Zeit der Erzeugung des Cache zu verwenden. Damit können Sie 'cache_lifetime'
|
|
setzen, bevor Sie das Template einbinden und haben so eine feine Kontrolle darüber,
|
|
wann ein bestimmter Cache abläuft. Konsultieren Sie dazu auch: <link linkend="api.is.cached">is_cached</link>.
|
|
</para>
|
|
<para>
|
|
Wenn '$compile_check' aktiviert ist, wird der Cache regeneriert sobald ein Template
|
|
oder eine Konfigurations-Variable geändert wurde. Wenn '$force_compile' aktiviert ist,
|
|
werden die gecachten Inhalte bei jedem Aufruf neu generiert.
|
|
</para>
|
|
</sect1>
|
|
<sect1 id="variable.cache.dir">
|
|
<title>$cache_dir</title>
|
|
<para>
|
|
Definiert den Namen des Verzeichnisses in dem die Template-Caches
|
|
angelegt werden. Normalerweise ist dies './cache', was Smarty veranlasst
|
|
das Cache-Verzeichnis im aktuellen Verzeichnis zu suchen. Sie können
|
|
auch einen eigenen Cache-Handler zur Kontrolle der Cache-Dateien
|
|
definieren, der diese Einstellung ignoriert.
|
|
</para>
|
|
<note>
|
|
<title>Technische Bemerkung</title>
|
|
<para>
|
|
Die Angabe muss entweder relativ oder absolut angegeben werden. 'include_path'
|
|
wird nicht verwendet.
|
|
</para>
|
|
</note>
|
|
<note>
|
|
<title>Technische Bemerkung</title>
|
|
<para>
|
|
Es wird empfohlen ein Verzeichnis ausserhalb der DocumentRoot zu verwenden.
|
|
</para>
|
|
</note>
|
|
</sect1>
|
|
<sect1 id="variable.cache.lifetime">
|
|
<title>$cache_lifetime</title>
|
|
<para>
|
|
Definiert die Zeitspanne (in Sekunden) die ein Cache gültig
|
|
bleibt. Ist die Zeit abgelaufen, wird der Cache neu generiert. '$caching'
|
|
muss eingeschaltet (true) sein, damit '$cache_lifetime' Sinn macht. Der
|
|
Wert -1 bewirkt, dass der Cache nie abläuft. Der Wert 0 bewirkt, dass
|
|
der Inhalt immer neu generiert wird (nur sinnvoll für Tests, eine
|
|
effizientere Methode wäre <link linkend="variable.caching">$caching</link>
|
|
auf 'false' zu setzen).
|
|
</para>
|
|
<para>
|
|
Wenn <link linkend="variable.force.compile">$force_compile</link>
|
|
gesetzt ist, wird der Cache immer neu generiert (was einem Ausschalten
|
|
von caching gleichkommt). Mit der <link linkend="api.clear.all.cache">clear_all_cache()</link>
|
|
Funktion können Sie alle Cache-Dateien auf einmal entfernen. Mit der
|
|
<link linkend="api.clear.cache">clear_cache()</link> Funktion können Sie
|
|
einzelne Cache-Dateien (oder Gruppen) entfernen.
|
|
</para>
|
|
<note>
|
|
<title>Technische Bemerkung</title>
|
|
<para>
|
|
Falls Sie bestimmten Templates eine eigene Cache-Lifetime geben wollen,
|
|
können Sie dies tun indem Sie <link linkend="variable.caching">$caching</link>
|
|
auf 2 stellen und '$cache_lifetime' einen einmaligen Wert zuweisen, bevor Sie
|
|
'display()' oder 'fetch()' aufrufen.
|
|
</para>
|
|
</note>
|
|
</sect1>
|
|
<sect1 id="variable.cache.handler.func">
|
|
<title>$cache_handler_func</title>
|
|
<para>
|
|
Sie können auch eine eigene Cache-Handler Funktion definieren.
|
|
Siehe Abschnitt zur <link linkend="section.template.cache.handler.func">custom cache handler</link> Funktion.
|
|
</para>
|
|
</sect1>
|
|
<sect1 id="variable.cache.modified.check">
|
|
<title>$cache_modified_check</title>
|
|
<para>
|
|
Wenn auf 1 gesetzt, verwendet Smarty den If-Modified-Since
|
|
Header des Clients. Falls sich der Timestamp der Cache-Datei
|
|
seit dem letzten Besuch nicht geändert hat, wird der
|
|
Header '304 Not Modified' anstatt des Inhalts ausgegeben. Dies
|
|
funktioniert nur mit gecachten Inhalten die keine <command>insert</command>
|
|
Tags enthalten.
|
|
</para>
|
|
</sect1>
|
|
<sect1 id="variable.default.template.handler.func">
|
|
<title>$default_template_handler_func</title>
|
|
<para>
|
|
Diese Funktion wird aufgerufen, wenn ein Template nicht aus der
|
|
vorgegebenen Quelle geladen werden kann.
|
|
</para>
|
|
</sect1>
|
|
<sect1 id="variable.php.handling">
|
|
<title>$php_handling</title>
|
|
<para>
|
|
Definiert wie Smarty mit PHP-Code innerhalb von Templates umgehen soll.
|
|
Es gibt 4 verschiedene Einstellungen. Normalerweise wird
|
|
SMARTY_PHP_PASSTHRU verwendet. Achtung: '$php_handling' wirkt sich NICHT
|
|
auf PHP-Code aus, der zwischen <link linkend="language.function.php">{php}{/php}</link>
|
|
Tags steht.
|
|
</para>
|
|
<itemizedlist>
|
|
<listitem><para>SMARTY_PHP_PASSTHRU - Smarty gibt die Tags aus.</para></listitem>
|
|
<listitem><para>SMARTY_PHP_QUOTE - Smarty maskiert die Tags als HTML-Entities.</para></listitem>
|
|
<listitem><para>SMARTY_PHP_REMOVE - Smarty entfernt die Tags.</para></listitem>
|
|
<listitem><para>SMARTY_PHP_ALLOW - Smarty führt den Code als PHP-Code aus.</para></listitem>
|
|
</itemizedlist>
|
|
<para>
|
|
ACHTUNG: Es wird davon abgeraten, PHP-Code in Templates einzubetten.
|
|
Bitte verwenden Sie stattdessen <link linkend="language.custom.functions">custom functions</link>
|
|
oder <link linkend="language.modifiers">Variablen-Modifikatoren</link>.
|
|
</para>
|
|
</sect1>
|
|
<sect1 id="variable.security">
|
|
<title>$security</title>
|
|
<para>
|
|
'$security' ein-/ausschalten. Normalerweise 'false' (ausgeschaltet).
|
|
Die Sicherheitseinstellung ist wertvoll, wenn nicht vertrauenswürdigen
|
|
Parteien Zugriff auf die Templates gegeben wird (zum Beispiel via FTP).
|
|
Mit aktivierter '$security' kann verhindert werden, dass diese das System
|
|
via Template-Engine kompromittieren. Die '$security' einzuschalten halt folgende
|
|
Auswirkungen auf die Template-Language (ausser sie werden mit '$security_settings'
|
|
überschrieben):
|
|
</para>
|
|
<itemizedlist>
|
|
<listitem><para>Wenn '$php_handling' auf SMARTY_PHP_ALLOW geschaltet ist, wird der Wert auf SMARTY_PHP_PASSTHRU geändert.</para></listitem>
|
|
<listitem><para>Ausser den in '$security_settings' definierten, sind keine Funktionen in IF-Statements aufrufbar.</para></listitem>
|
|
<listitem><para>Templates können nur aus den im '$secure_dir'-Array definierten Verzeichnissen geladen werden.</para></listitem>
|
|
<listitem><para>'fetch()' kann nur verwendet werden um Dateien aus '$secure_dir' zu laden.</para></listitem>
|
|
<listitem><para>{php}{/php}-Tags sind nicht erlaubt.</para></listitem>
|
|
<listitem><para>Ausser den in '$security_settings' definierten, sind keine PHP-Funktionen direkt als Variablen-Modifikatoren aufrufbar.</para></listitem>
|
|
</itemizedlist>
|
|
</sect1>
|
|
<sect1 id="variable.secure.dir">
|
|
<title>$secure_dir</title>
|
|
<para>
|
|
Definiert die als 'sicher' geltenden Verzeichnisse als Array.
|
|
{include} und {fetch} verwenden diese Verzeichnisse, wenn '$security'
|
|
eingeschaltet ist.
|
|
</para>
|
|
</sect1>
|
|
<sect1 id="variable.security.settings">
|
|
<title>$security_settings</title>
|
|
<para>
|
|
Wird verwendet um spezifische Sicherheits-Einstellungen zu
|
|
ändern, wenn '$security' eingeschaltet ist.
|
|
</para>
|
|
<itemizedlist>
|
|
<listitem><para>PHP_HANDLING - true/false. Wenn auf 'true' gesetzt wird '$php_handling' ignoriert.</para></listitem>
|
|
<listitem><para>IF_FUNCS - Ist ein Array aller erlaubter Funktionen in IF-Statements.</para></listitem>
|
|
<listitem><para>INCLUDE_ANY - true/false. Wenn 'true', kann jedes Template geladen werden, auch ausserhalb der '$secure_dir'-Liste.</para></listitem>
|
|
<listitem><para>PHP_TAGS - true/false. Wenn 'true', sind keine {php}{/php}-Tags erlaubt.</para></listitem>
|
|
<listitem><para>MODIFIER_FUNCS - Ist ein Array aller Funktionen die als Variablen-Modifikatoren verwendet werden dürfen.</para></listitem>
|
|
</itemizedlist>
|
|
</sect1>
|
|
<sect1 id="variable.trusted.dir">
|
|
<title>$trusted_dir</title>
|
|
<para>
|
|
'$trusted_dir' wird nur verwendet wenn die Sicherheit eingeschaltet ist. Der Wert
|
|
ist ein Array aller Verzeichnisse, die als vertrauenswürdig gelten.
|
|
In diesen Verzeichnissen können PHP-Skripte, die man direkt aus einem Template
|
|
mit <link linkend="language.function.include.php">{include_php}</link> aufruft,
|
|
abgelegt werden.
|
|
</para>
|
|
</sect1>
|
|
<sect1 id="variable.left.delimiter">
|
|
<title>$left_delimiter</title>
|
|
<para>
|
|
Das zu verwendende linke Trennzeichen der Template-Sprache.
|
|
Normalerweise '{'.
|
|
</para>
|
|
</sect1>
|
|
<sect1 id="variable.right.delimiter">
|
|
<title>$right_delimiter</title>
|
|
<para>
|
|
Das zu verwendende rechte Trennzeichen der Template-Sprache.
|
|
Normalerweise '}'.
|
|
</para>
|
|
</sect1>
|
|
<sect1 id="variable.show.info.header">
|
|
<title>$show_info_header</title>
|
|
<para>
|
|
Gibt am Anfang der HTML-Seite die Smarty Version und das Kompilier-Datum des Templates
|
|
als Kommentar aus. Normalerweise 'false'.
|
|
</para>
|
|
</sect1>
|
|
<sect1 id="variable.show.info.include">
|
|
<title>$show_info_include</title>
|
|
<para>
|
|
Gibt am Anfang und am Ende jedes eingebundenen Templates einen HTML-Kommentar aus.
|
|
Normalerweise 'false'.
|
|
</para>
|
|
</sect1>
|
|
<sect1 id="variable.compiler.class">
|
|
<title>$compiler_class</title>
|
|
<para>
|
|
Definiert den Namen der Compiler-Klasse, die Smarty zum kompilieren
|
|
der Templates verwenden soll. Normalerweise 'Smarty_Compiler'. Nur
|
|
für fortgeschrittene Anwender.
|
|
</para>
|
|
</sect1>
|
|
<sect1 id="variable.request.vars.order">
|
|
<title>$request_vars_order</title>
|
|
<para>
|
|
Die Reihenfolge in welcher die Request-Variblen zugewiesen werden.
|
|
Verhält sich wie 'variables_order' in der php.ini.
|
|
</para>
|
|
</sect1>
|
|
<sect1 id="variable.compile.id">
|
|
<title>$compile_id</title>
|
|
<para>
|
|
Persistenter 'compile-identifier'. Anstatt jedem Funktionsaufruf die selbe 'compile_id'
|
|
zu übergeben, kann eine individuelle 'compile_id' gesetzt werden. Das ist z. B.
|
|
sinnvoll, um in Kombination mit einem 'prefilter' verschiedene Sprach-Versionen eines Template
|
|
kompilieren.
|
|
</para>
|
|
</sect1>
|
|
<sect1 id="variable.use.sub.dirs">
|
|
<title>$use_sub_dirs</title>
|
|
<para>
|
|
Wenn Sie Smarty in einer Umgebung einsetzen, die das Erstellen von Unterverzeichnissen
|
|
nicht erlaubt, können Sie diesen Wert auf 'false' setzen. Unterverzeichnisse
|
|
sind jedoch effizienter und sollten deshalb möglichst verwendet werden.
|
|
</para>
|
|
</sect1>
|
|
<sect1 id="variable.default.modifiers">
|
|
<title>$default_modifiers</title>
|
|
<para>
|
|
Definiert ein Array von Variablen-Modifikatoren, die auf jeder Variable anzuwenden sind.
|
|
Wenn Sie zum Beispiel alle Variablen standardmässig HTML-Maskieren wollen,
|
|
können Sie array('escape:"htmlall"'); verwenden. Um eine Variable von dieser
|
|
Behandlung auszuschliessen, können Sie ihr den Modifikator 'nodefaults' übergeben.
|
|
Zum Beispiel: {$var|nodefaults}.
|
|
</para>
|
|
</sect1>
|
|
</chapter>
|
|
<chapter id="api.functions">
|
|
<title>Methoden</title>
|
|
<sect1 id="api.append">
|
|
<title>append (anhängen)</title>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>void <function>append</function></funcdef>
|
|
<paramdef>mixed <parameter>var</parameter></paramdef>
|
|
</funcprototype>
|
|
<funcprototype>
|
|
<funcdef>void <function>append</function></funcdef>
|
|
<paramdef>string <parameter>varname</parameter></paramdef>
|
|
<paramdef>mixed <parameter>var</parameter></paramdef>
|
|
</funcprototype>
|
|
</funcsynopsis>
|
|
<para>
|
|
Wird verwendet, um an Template-Variablen weitere Daten anzuhängen. Sie
|
|
können entweder ein Namen/Wert-Paar oder assoziative Arrays,
|
|
die mehrere Namen/Wert-Paare enthalten, übergeben.
|
|
</para>
|
|
<example>
|
|
<title>append (anhängen)</title>
|
|
<programlisting>
|
|
|
|
// Namen/Wert-Paare übergeben
|
|
$smarty->append("Name","Fred");
|
|
$smarty->append("Address",$address);
|
|
|
|
// assoziatives Array übergeben
|
|
$smarty->append(array("city" => "Lincoln","state" => "Nebraska"));</programlisting>
|
|
</example>
|
|
</sect1>
|
|
<sect1 id="api.append.by.ref">
|
|
<title>append_by_ref (via Referenz anhängen)</title>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>void <function>append_by_ref</function></funcdef>
|
|
<paramdef>string <parameter>varname</parameter></paramdef>
|
|
<paramdef>mixed <parameter>var</parameter></paramdef>
|
|
</funcprototype>
|
|
</funcsynopsis>
|
|
<para>
|
|
Wird verwendet, um an Template-Variablen Werte via Referenz (pass by reference) anstatt via Kopie
|
|
anzuhängen. Konsultieren Sie das PHP-Manual zum Thema 'variable referencing'
|
|
für weitere Erklärungen.
|
|
</para>
|
|
<note>
|
|
<title>Technische Bemerkung</title>
|
|
<para>
|
|
'append_by_ref()' ist effizienter als 'append()', da keine Kopie der Variable
|
|
erzeugt, sondern auf die Variable im Speicher referenziert wird. Beachten Sie
|
|
dabei, dass eine nachträgliche änderung Original-Variable auch die zugewiesene Variable
|
|
ändert. PHP5 wird die Referenzierung automatisch übernehmen, diese
|
|
Funktion dient als Workaround.
|
|
</para>
|
|
</note>
|
|
<example>
|
|
<title>append_by_ref (via Referenz anhängen)</title>
|
|
<programlisting>
|
|
|
|
// Namen/Wert-Paare übergeben
|
|
$smarty->append_by_ref("Name",$myname);
|
|
$smarty->append_by_ref("Address",$address);</programlisting>
|
|
</example>
|
|
</sect1>
|
|
<sect1 id="api.assign">
|
|
<title>assign (zuweisen)</title>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>void <function>assign</function></funcdef>
|
|
<paramdef>mixed <parameter>var</parameter></paramdef>
|
|
</funcprototype>
|
|
<funcprototype>
|
|
<funcdef>void <function>assign</function></funcdef>
|
|
<paramdef>string <parameter>varname</parameter></paramdef>
|
|
<paramdef>mixed <parameter>var</parameter></paramdef>
|
|
</funcprototype>
|
|
</funcsynopsis>
|
|
<para>
|
|
Wird verwendet, um einem Template Werte zuzuweisen. Sie können
|
|
entweder Namen/Wert-Paare oder ein assoziatives Array
|
|
mit Namen/Wert-Paaren übergeben.
|
|
</para>
|
|
<example>
|
|
<title>assign</title>
|
|
<programlisting>
|
|
|
|
// Namen/Wert-Paare übergeben
|
|
$smarty->assign("Name","Fred");
|
|
$smarty->assign("Address",$address);
|
|
|
|
|
|
// assoziatives Array mit Namen/Wert-Paaren übergeben
|
|
$smarty->assign(array("city" => "Lincoln","state" => "Nebraska"));</programlisting>
|
|
</example>
|
|
</sect1>
|
|
<sect1 id="api.assign.by.ref">
|
|
<title>assign_by_ref (via Referenz zuweisen)</title>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>void <function>assign_by_ref</function></funcdef>
|
|
<paramdef>string <parameter>varname</parameter></paramdef>
|
|
<paramdef>mixed <parameter>var</parameter></paramdef>
|
|
</funcprototype>
|
|
</funcsynopsis>
|
|
<para>
|
|
Weist einen Wert via Referenz zu, anstatt eine Kopie zu machen.
|
|
Konsultieren Sie das PHP-Manual zum Thema 'variable referencing' für weitere Erklärungen.
|
|
</para>
|
|
<note>
|
|
<title>Technical Note</title>
|
|
<para>
|
|
'assign_by_ref()' ist effizienter als 'assign()', da keine Kopie der Variable
|
|
erzeugt wird, sondern auf die Variable im Speicher referenziert wird. Beachten Sie
|
|
dabei, dass eine nachträgliche änderung Original-Variable auch die zugewiesene Variable
|
|
ändert. PHP5 wird die Referenzierung automatisch übernehmen, diese
|
|
Funktion dient als Workaround.
|
|
</para>
|
|
</note>
|
|
<example>
|
|
<title>assign_by_ref (via Referenz zuweisen)</title>
|
|
<programlisting>
|
|
|
|
// Namen/Wert-Paare übergeben
|
|
$smarty->assign_by_ref("Name",$myname);
|
|
$smarty->assign_by_ref("Address",$address);</programlisting>
|
|
</example>
|
|
</sect1>
|
|
<sect1 id="api.clear.all.assign">
|
|
<title>clear_all_assign (alle Zuweisungen löschen)</title>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>void <function>clear_all_assign</function></funcdef>
|
|
<paramdef><parameter></parameter></paramdef>
|
|
</funcprototype>
|
|
</funcsynopsis>
|
|
<para>
|
|
Löscht die Werte aller zugewiesenen Variablen.
|
|
</para>
|
|
<example>
|
|
<title>clear_all_assign (alle Zuweisungen löschen)</title>
|
|
<programlisting>
|
|
|
|
// lösche alle zugewiesenen Variablen
|
|
$smarty->clear_all_assign();</programlisting>
|
|
</example>
|
|
</sect1>
|
|
<sect1 id="api.clear.all.cache">
|
|
<title>clear_all_cache (Cache vollständig leeren)</title>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>void <function>clear_all_cache</function></funcdef>
|
|
<paramdef>int <parameter>expire time</parameter></paramdef>
|
|
</funcprototype>
|
|
</funcsynopsis>
|
|
<para>
|
|
Leert den gesamten Template-Cache. Als optionaler Parameter kann ein
|
|
Mindestalter in Sekunden angegeben werden, das die einzelne Datei haben
|
|
muss, bevor sie gelöscht wird.
|
|
</para>
|
|
<example>
|
|
<title>clear_all_cache (Cache vollständig leeren)</title>
|
|
<programlisting>
|
|
|
|
// leere den gesamten cache
|
|
$smarty->clear_all_cache();</programlisting>
|
|
</example>
|
|
</sect1>
|
|
<sect1 id="api.clear.assign">
|
|
<title>clear_assign (lösche Zuweisung)</title>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>void <function>clear_assign</function></funcdef>
|
|
<paramdef>string <parameter>var</parameter></paramdef>
|
|
</funcprototype>
|
|
</funcsynopsis>
|
|
<para>
|
|
Löscht den Wert einer oder mehrerer (übergabe als Array) zugewiesener Variablen.
|
|
</para>
|
|
<example>
|
|
<title>clear_assign (lösche Zuweisung)</title>
|
|
<programlisting>
|
|
|
|
// lösche eine einzelne Variable
|
|
$smarty->clear_assign("Name");
|
|
|
|
|
|
// lösche mehrere Variablen
|
|
$smarty->clear_assign(array("Name","Address","Zip"));</programlisting>
|
|
</example>
|
|
</sect1>
|
|
<sect1 id="api.clear.cache">
|
|
<title>clear_cache (leere Cache)</title>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>void <function>clear_cache</function></funcdef>
|
|
<paramdef>string <parameter>template</parameter></paramdef>
|
|
<paramdef>string <parameter><optional>cache id</optional></parameter></paramdef>
|
|
<paramdef>string <parameter><optional>compile id</optional></parameter></paramdef>
|
|
<paramdef>int <parameter><optional>expire time</optional></parameter></paramdef>
|
|
</funcprototype>
|
|
</funcsynopsis>
|
|
<para>
|
|
Löscht den Cache eines bestimmten Templates. Falls Sie mehrere
|
|
Caches für ein Template verwenden, können Sie als zweiten Parameter
|
|
die 'cache_id' des zu leerenden Caches übergeben. Als dritten Parameter
|
|
können sie die 'compile_id' angeben. Sie können Templates auch
|
|
gruppieren und dann als Gruppe aus dem Cache löschen. Sehen sie dazu den Abschnitt über
|
|
<link linkend="caching">caching</link>. Als vierten Parameter können Sie
|
|
ein Mindestalter in Sekunden angeben, das ein Cache aufweisen muss,
|
|
bevor er gelöscht wird.
|
|
</para>
|
|
<example>
|
|
<title>clear_cache (Cache leeren)</title>
|
|
<programlisting>
|
|
|
|
// Cache eines Templates leeren
|
|
$smarty->clear_cache("index.tpl");
|
|
|
|
|
|
// leere den Cache einer bestimmten 'cache-id' eines mehrfach-gecachten Templates
|
|
$smarty->clear_cache("index.tpl","CACHEID");</programlisting>
|
|
</example>
|
|
</sect1>
|
|
<sect1 id="api.clear.compiled.tpl">
|
|
<title>clear_compiled_tpl (kompiliertes Template löschen)</title>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>void <function>clear_compiled_tpl</function></funcdef>
|
|
<paramdef>string <parameter>tpl_file</parameter></paramdef>
|
|
</funcprototype>
|
|
</funcsynopsis>
|
|
<para>
|
|
Löscht die kompilierte Version des angegebenen Templates. Falls
|
|
kein Template-Name übergeben wird, werden alle kompilierten
|
|
Templates gelöscht. Diese Funktion ist für fortgeschrittene Benutzer.
|
|
</para>
|
|
<example>
|
|
<title>clear_compiled_tpl (kompiliertes Template löschen)</title>
|
|
<programlisting>
|
|
|
|
// ein bestimmtes kompiliertes Template löschen
|
|
$smarty->clear_compiled_tpl("index.tpl");
|
|
|
|
|
|
// das gesamte Kompilier-Verzeichnis löschen
|
|
$smarty->clear_compiled_tpl();</programlisting>
|
|
</example>
|
|
</sect1>
|
|
<sect1 id="api.display">
|
|
<title>display (ausgeben)</title>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>void <function>display</function></funcdef>
|
|
<paramdef>string <parameter>template</parameter></paramdef>
|
|
<paramdef>string <parameter><optional>cache_id</optional></parameter></paramdef>
|
|
<paramdef>string <parameter><optional>compile_id</optional></parameter></paramdef>
|
|
</funcprototype>
|
|
</funcsynopsis>
|
|
<para>
|
|
Gibt ein Template aus. Sie müssen einen gültigen
|
|
<link linkend="template.resources">Template Ressourcen</link>-Typ
|
|
inklusive Pfad angeben. Als optionalen zweiten Parameter können
|
|
Sie eine 'cache_id' übergeben. Konsultieren
|
|
Sie den Abschnitt über <link linkend="caching">caching</link> für weitere Informationen.
|
|
</para>
|
|
<para>
|
|
Als optionalen dritten Parameter können Sie eine 'compile_id' übergeben.
|
|
Dies ist wertvoll, falls Sie verschiedene Versionen eines Templates
|
|
kompilieren wollen - zum Beispiel in verschiedenen Sprachen. 'compile_id'
|
|
wird auch verwendet, wenn Sie mehr als ein '$template_dir' aber nur ein
|
|
'$compile_dir' haben. Setzen Sie dazu für jedes Verzeichnis eine
|
|
eigene 'compile_id', andernfalls werden Templates mit dem gleichen Namen
|
|
überschrieben. Sie können die Variable <link linkend="variable.compile.id">$compile_id</link>
|
|
auch einmalig setzen, anstatt sie bei jedem Aufruf von 'display()' zu übergeben.
|
|
</para>
|
|
<example>
|
|
<title>display (ausgeben)</title>
|
|
<programlisting>
|
|
include("Smarty.class.php");
|
|
$smarty = new Smarty;
|
|
$smarty->caching = true;
|
|
|
|
|
|
// Datenbank-Aufrufe nur durchführen, wenn kein Cache existiert
|
|
if(!$smarty->is_cached("index.tpl"))
|
|
{
|
|
|
|
|
|
// Beispieldaten
|
|
$address = "245 N 50th";
|
|
$db_data = array(
|
|
"City" => "Lincoln",
|
|
"State" => "Nebraska",
|
|
"Zip" = > "68502"
|
|
);
|
|
|
|
$smarty->assign("Name","Fred");
|
|
$smarty->assign("Address",$address);
|
|
$smarty->assign($db_data);
|
|
|
|
}
|
|
|
|
|
|
// Ausgabe
|
|
$smarty->display("index.tpl");</programlisting>
|
|
</example>
|
|
<para>
|
|
Verwenden Sie die Syntax von <link linkend="template.resources">template resources</link>
|
|
um Dateien ausserhalb von '$template_dir' zu verwenden.
|
|
</para>
|
|
<example>
|
|
<title>Beispiele von Template-Ressourcen für 'display()'</title>
|
|
<programlisting>
|
|
|
|
// absoluter Dateipfad
|
|
$smarty->display("/usr/local/include/templates/header.tpl");
|
|
|
|
|
|
// absoluter Dateipfad (alternativ)
|
|
$smarty->display("file:/usr/local/include/templates/header.tpl");
|
|
|
|
|
|
// absoluter Dateipfad unter Windows (MUSS mit 'file:'-Prefix versehen werden)
|
|
$smarty->display("file:C:/www/pub/templates/header.tpl");
|
|
|
|
|
|
// aus der Template-Ressource 'db' einbinden
|
|
$smarty->display("db:header.tpl");</programlisting>
|
|
</example>
|
|
|
|
</sect1>
|
|
<sect1 id="api.fetch">
|
|
<title>fetch</title>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>string <function>fetch</function></funcdef>
|
|
<paramdef>string <parameter>template</parameter></paramdef>
|
|
<paramdef>string <parameter><optional>cache_id</optional></parameter></paramdef>
|
|
<paramdef>string <parameter><optional>compile_id</optional></parameter></paramdef>
|
|
</funcprototype>
|
|
</funcsynopsis>
|
|
<para>
|
|
Gibt die Ausgabe des Template zurück, anstatt es direkt anzuzeigen. Übergeben Sie
|
|
einen gültigen <link linkend="template.resources">Template Ressource</link>-Typ
|
|
und -Pfad. Als optionaler zweiter Parameter kann eine 'cache_id' übergeben werden.
|
|
Bitte konsultieren Sie den Abschnitt über <link linkend="caching">caching </link>
|
|
für weitere Informationen.
|
|
|
|
</para>
|
|
<para>
|
|
Als optionalen dritten Parameter können Sie eine 'compile_id' übergeben.
|
|
Dies ist wertvoll, falls Sie verschiedene Versionen eines Templates
|
|
kompilieren wollen - zum Beispiel in verschiedenen Sprachen. 'compile_id'
|
|
wird auch verwendet, wenn Sie mehr als ein '$template_dir' aber nur ein
|
|
'$compile_dir' haben. Setzen Sie dann für jedes Verzeichnis eine
|
|
eigene 'compile_id', andernfalls werden Templates mit dem gleichen Namen
|
|
überschrieben. Sie können die Variable <link linkend="variable.compile.id">$compile_id</link>
|
|
auch einmalig setzen, anstatt sie bei jedem Aufruf von 'fetch()' zu übergeben.
|
|
</para>
|
|
<example>
|
|
<title>fetch</title>
|
|
<programlisting>
|
|
include("Smarty.class.php");
|
|
$smarty = new Smarty;
|
|
|
|
$smarty->caching = true;
|
|
|
|
|
|
// Datenbank-Aufrufe nur durchführen, wenn kein Cache existiert
|
|
if(!$smarty->is_cached("index.tpl"))
|
|
{
|
|
|
|
|
|
// Beispieldaten
|
|
$address = "245 N 50th";
|
|
$db_data = array(
|
|
"City" => "Lincoln",
|
|
"State" => "Nebraska",
|
|
"Zip" = > "68502"
|
|
);
|
|
|
|
$smarty->assign("Name","Fred");
|
|
$smarty->assign("Address",$address);
|
|
$smarty->assign($db_data);
|
|
|
|
}
|
|
|
|
|
|
// Ausgabe abfangen
|
|
$output = $smarty->fetch("index.tpl");
|
|
|
|
|
|
// Etwas mit $output anstellen
|
|
|
|
echo $output;</programlisting>
|
|
</example>
|
|
</sect1>
|
|
<sect1 id="api.get.template.vars">
|
|
<title>get_template_vars (Template-Variablen extrahieren)</title>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>array <function>get_template_vars</function></funcdef>
|
|
<paramdef><parameter></parameter></paramdef>
|
|
</funcprototype>
|
|
</funcsynopsis>
|
|
<para>
|
|
Gibt ein Array der zugewiesenen Template-Variablen zurück.
|
|
</para>
|
|
<example>
|
|
<title>get_template_vars (Template-Variablen extrahieren)</title>
|
|
<programlisting>
|
|
|
|
// alle zugewiesenen Template-Variablen extrahieren
|
|
$tpl_vars = $smarty->get_template_vars();
|
|
|
|
|
|
// Anschauen
|
|
var_dump($tpl_vars);</programlisting>
|
|
</example>
|
|
</sect1>
|
|
<sect1 id="api.is.cached">
|
|
<title>is_cached (gecachte Version existiert)</title>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>void <function>is_cached</function></funcdef>
|
|
<paramdef>string <parameter>template</parameter></paramdef>
|
|
<paramdef>[string <parameter>cache_id</parameter>]</paramdef>
|
|
</funcprototype>
|
|
</funcsynopsis>
|
|
<para>
|
|
Gibt 'true' zurück, wenn ein gültiger Cache für das angegebene Template existiert.
|
|
Dies funktioniert nur, wenn <link linkend="variable.caching">caching</link> eingeschaltet ist.
|
|
</para>
|
|
<example>
|
|
<title>is_cached</title>
|
|
<programlisting>
|
|
$smarty->caching = true;
|
|
|
|
if(!$smarty->is_cached("index.tpl")) {
|
|
|
|
// Datenbank-Abfragen, Variablen zuweisen...
|
|
}
|
|
|
|
$smarty->display("index.tpl");</programlisting>
|
|
</example>
|
|
<para>
|
|
Als optionalen zweiten Parameter können Sie die 'cache_id' übergeben,
|
|
falls Sie mehrere Caches für ein Template verwenden.
|
|
</para>
|
|
<example>
|
|
<title>'is_cached' bei mehreren Template-Caches</title>
|
|
<programlisting>
|
|
$smarty->caching = true;
|
|
|
|
if(!$smarty->is_cached("index.tpl", "FrontPage")) {
|
|
|
|
// Datenbank Abfragen, Variablen zuweisen...
|
|
}
|
|
|
|
$smarty->display("index.tpl","FrontPage");</programlisting>
|
|
</example>
|
|
</sect1>
|
|
<sect1 id="api.load.filter">
|
|
<title>load_filter (Filter laden)</title>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>void <function>load_filter</function></funcdef>
|
|
<paramdef>string <parameter>type</parameter></paramdef>
|
|
<paramdef>string <parameter>name</parameter></paramdef>
|
|
</funcprototype>
|
|
</funcsynopsis>
|
|
<para>
|
|
Mit dieser Funktion können Filter-Plugins geladen werden.
|
|
Der erste Parameter definiert den Filter-Typ und kann einen der
|
|
folgenden Werte haben: 'pre', 'post', oder 'output'. Als zweiter
|
|
Parameter wird der Name des Filter-Plugins angegeben, zum Beispiel 'trim'.
|
|
</para>
|
|
<example>
|
|
<title>Filter-Plugins laden</title>
|
|
<programlisting>
|
|
$smarty->load_filter('pre', 'trim'); // lade den 'pre'-Filter (Vor-Filter) namens 'trim'
|
|
$smarty->load_filter('pre', 'datefooter'); // lade einen zweiten Vor-Filter namens 'datefooter'
|
|
$smarty->load_filter('output', 'compress'); // lade den 'output'-Filter (Ausgabe-Filter) namens 'compress'</programlisting>
|
|
</example>
|
|
</sect1>
|
|
<sect1 id="api.register.block">
|
|
<title>register_block (Block-Funktion registrieren)</title>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>void <function>register_block</function></funcdef>
|
|
<paramdef>string <parameter>name</parameter></paramdef>
|
|
<paramdef>string <parameter>impl</parameter></paramdef>
|
|
</funcprototype>
|
|
</funcsynopsis>
|
|
<para>
|
|
Wird verwendet, um Block-Funktion-Plugins dynamisch zu registrieren.
|
|
Übergeben Sie dazu den Namen der Block-Funktion und den Namen der
|
|
PHP-Funktion, die die entsprechende Funktionalität bereitstellt.
|
|
</para>
|
|
<example>
|
|
<title>register_block (Block-Funktion registrieren)</title>
|
|
<programlisting>
|
|
/* PHP */
|
|
$smarty->register_block("translate", "do_translation");
|
|
|
|
function do_translation ($params, $content, &$smarty) {
|
|
if ($content) {
|
|
$lang = $params['lang'];
|
|
|
|
// übersetze den Inhalt von '$content'
|
|
echo $translation;
|
|
}
|
|
}
|
|
|
|
{* template *}
|
|
{translate lang="br"}
|
|
Hello, world!
|
|
{/translate}</programlisting>
|
|
</example>
|
|
</sect1>
|
|
<sect1 id="api.register.compiler.function">
|
|
<title>register_compiler_function (Compiler-Funktion registrieren)</title>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>void <function>register_compiler_function</function></funcdef>
|
|
<paramdef>string <parameter>name</parameter></paramdef>
|
|
<paramdef>string <parameter>impl</parameter></paramdef>
|
|
</funcprototype>
|
|
</funcsynopsis>
|
|
<para>
|
|
Wird verwendet, um Compiler-Funktion-Plugins dynamisch zu
|
|
registrieren. Übergeben Sie dazu den Namen der Compiler-Funktion und den Namen der
|
|
PHP-Funktion, die die entsprechende Funktionalität bereitstellt.
|
|
</para>
|
|
</sect1>
|
|
<sect1 id="api.register.function">
|
|
<title>register_function (Funktion registrieren)</title>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>void <function>register_function</function></funcdef>
|
|
<paramdef>string <parameter>name</parameter></paramdef>
|
|
<paramdef>string <parameter>impl</parameter></paramdef>
|
|
</funcprototype>
|
|
</funcsynopsis>
|
|
<para>
|
|
Wird verwendet, um Template-Funktion-Plugins dynamisch zu
|
|
registrieren. Übergeben Sie dazu den Namen der Template-Funktion
|
|
und den Namen der PHP-Funktion, die die entsprechende Funktionalität bereitstellt.
|
|
|
|
</para>
|
|
<example>
|
|
<title>register_function (Funktion registrieren)</title>
|
|
<programlisting>
|
|
$smarty->register_function("date_now", "print_current_date");
|
|
|
|
function print_current_date ($params) {
|
|
extract($params);
|
|
if(empty($format))
|
|
$format="%b %e, %Y";
|
|
echo strftime($format,time());
|
|
}
|
|
|
|
// Von nun an können Sie {date_now} verwenden, um das aktuelle Datum auszugeben.
|
|
// Oder {date_now format="%Y/%m/%d"}, wenn Sie es formatieren wollen.</programlisting>
|
|
</example>
|
|
</sect1>
|
|
<sect1 id="api.register.modifier">
|
|
<title>register_modifier (Modifikator-Plugin registrieren)</title>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>void <function>register_modifier</function></funcdef>
|
|
<paramdef>string <parameter>name</parameter></paramdef>
|
|
<paramdef>string <parameter>impl</parameter></paramdef>
|
|
</funcprototype>
|
|
</funcsynopsis>
|
|
<para>
|
|
Wird verwendet, um Modifikator-Plugins dynamisch zu
|
|
registrieren. Übergeben Sie dazu den Namen der Modifikator-Funktion
|
|
und den Namen der PHP-Funktion, die die entsprechende Funktionalität
|
|
bereitstellt.
|
|
</para>
|
|
<example>
|
|
<title>register_modifier (Modifikator-Plugin registrieren)</title>
|
|
<programlisting>
|
|
|
|
// PHP's 'stripslashes()'-Funktion als Smarty Modifikator registrieren
|
|
|
|
$smarty->register_modifier("sslash", "stripslashes");
|
|
|
|
|
|
// Von nun an können Sie {$var|sslash} verwenden,
|
|
// um "\"-Zeichen (Backslash) aus Zeichenketten zu entfernen. ('\\' wird zu '\',...)</programlisting>
|
|
</example>
|
|
</sect1>
|
|
<sect1 id="api.register.outputfilter">
|
|
<title>register_outputfilter (Ausgabefilter registrieren)</title>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>void <function>register_outputfilter</function></funcdef>
|
|
<paramdef>string <parameter>function_name</parameter></paramdef>
|
|
</funcprototype>
|
|
</funcsynopsis>
|
|
<para>
|
|
Wird verwendet, um Ausgabefilter dynamisch zu registrieren.
|
|
Ausgabefilter verändern die Ausgabe,
|
|
bevor sie angezeigt wird. Konsultieren Sie dazu den
|
|
Abschnitt <link linkend="advanced.features.outputfilters">template output filters</link>
|
|
</para>
|
|
</sect1>
|
|
<sect1 id="api.register.postfilter">
|
|
<title>register_postfilter ('post'-Filter registrieren)</title>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>void <function>register_postfilter</function></funcdef>
|
|
<paramdef>string <parameter>function_name</parameter></paramdef>
|
|
</funcprototype>
|
|
</funcsynopsis>
|
|
<para>
|
|
Wird verwendet, um 'post'-Filter dynamisch zu registrieren. 'post'-Filter werden
|
|
auf das kompilierte Template angewendet. Konsultieren Sie dazu den
|
|
Abschnitt <link linkend="advanced.features.postfilters">template postfilters</link>.
|
|
</para>
|
|
</sect1>
|
|
<sect1 id="api.register.prefilter">
|
|
<title>register_prefilter ('pre'-Filter registrieren)</title>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>void <function>register_prefilter</function></funcdef>
|
|
<paramdef>string <parameter>function_name</parameter></paramdef>
|
|
</funcprototype>
|
|
</funcsynopsis>
|
|
<para>
|
|
Wird verwendet, um 'pre'-Filter dynamisch zu registrieren. 'pre'-Filter werden
|
|
vor der Kompilierung auf das Template angewendet. Konsultieren Sie dazu den
|
|
Abschnitt <link linkend="advanced.features.prefilters">template prefilters</link>.
|
|
|
|
</para>
|
|
</sect1>
|
|
<sect1 id="api.register.resource">
|
|
<title>register_resource (Ressource registrieren)</title>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>void <function>register_resource</function></funcdef>
|
|
<paramdef>string <parameter>name</parameter></paramdef>
|
|
<paramdef>array <parameter>resource_funcs</parameter></paramdef>
|
|
</funcprototype>
|
|
</funcsynopsis>
|
|
<para>
|
|
Wird verwendet, um ein Ressource-Plugin dynamisch zu
|
|
registrieren. Übergeben Sie dazu den Ressourcen-Namen und
|
|
das Array mit den Namen der PHP-Funktionen, die die Funktionalität implementieren.
|
|
Konsultieren Sie den Abschnitt <link linkend="template.resources">template resources</link>
|
|
für weitere Informationen zum Thema.
|
|
</para>
|
|
<example>
|
|
<title>register_resource (Ressource registrieren)</title>
|
|
<programlisting>
|
|
$smarty->register_resource("db", array("db_get_template",
|
|
"db_get_timestamp",
|
|
"db_get_secure",
|
|
"db_get_trusted"));</programlisting>
|
|
</example>
|
|
</sect1>
|
|
<sect1 id="api.trigger.error">
|
|
<title>trigger_error (Fehler auslösen)</title>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>void <function>trigger_error</function></funcdef>
|
|
<paramdef>string <parameter>error_msg</parameter></paramdef>
|
|
<paramdef>[int <parameter>level</parameter>]</paramdef>
|
|
</funcprototype>
|
|
</funcsynopsis>
|
|
<para>
|
|
Wird verwendet, um eine Fehlermeldung via Smarty auszugeben.
|
|
Der <parameter>level</parameter>-Parameter kann alle
|
|
Werte der 'trigger_error()'-PHP-Funktion haben,
|
|
zum Beispiel E_USER_NOTICE, E_USER_WARNING, usw.
|
|
Voreingestellt ist E_USER_WARNING.
|
|
</para>
|
|
</sect1>
|
|
|
|
<sect1 id="api.template.exists">
|
|
<title>template_exists (Template existiert)</title>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>bool <function>template_exists</function></funcdef>
|
|
<paramdef>string <parameter>template</parameter></paramdef>
|
|
</funcprototype>
|
|
</funcsynopsis>
|
|
<para>
|
|
Diese Funktion prüft, ob das angegebene Template existiert. Als Parameter
|
|
können entweder ein Pfad im Dateisystem oder eine Ressource übergeben werden.
|
|
</para>
|
|
</sect1>
|
|
<sect1 id="api.unregister.block">
|
|
<title>unregister_block (Block-Funktion deaktivieren)</title>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>void <function>unregister_block</function></funcdef>
|
|
<paramdef>string <parameter>name</parameter></paramdef>
|
|
</funcprototype>
|
|
</funcsynopsis>
|
|
<para>
|
|
Wird verwendet, um registrierte Block-Funktionen auszuschalten.
|
|
Übergeben Sie dazu den Namen der Block-Funktion.
|
|
</para>
|
|
</sect1>
|
|
<sect1 id="api.unregister.compiler.function">
|
|
<title>unregister_compiler_function (Compiler-Funktion deaktivieren)</title>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>void <function>unregister_compiler_function</function></funcdef>
|
|
<paramdef>string <parameter>name</parameter></paramdef>
|
|
</funcprototype>
|
|
</funcsynopsis>
|
|
<para>
|
|
Wird verwendet, um registrierte Compiler-Funktionen auszuschalten.
|
|
Übergeben Sie dazu den Funktionsnamen der Compiler-Funktion.
|
|
</para>
|
|
</sect1>
|
|
<sect1 id="api.unregister.function">
|
|
<title>unregister_function (Template-Funktion deaktivieren)</title>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>void <function>unregister_function</function></funcdef>
|
|
<paramdef>string <parameter>name</parameter></paramdef>
|
|
</funcprototype>
|
|
</funcsynopsis>
|
|
<para>
|
|
Wird verwendet, um registrierte Template-Funktionen auszuschalten.
|
|
Übergeben Sie dazu den Namen der Template-Funktion.
|
|
</para>
|
|
<example>
|
|
<title>unregister_function</title>
|
|
<programlisting>
|
|
|
|
// Template-Designer sollen keinen Zugriff auf das Dateisystem haben
|
|
|
|
$smarty->unregister_function("fetch");</programlisting>
|
|
</example>
|
|
</sect1>
|
|
<sect1 id="api.unregister.modifier">
|
|
<title>unregister_modifier (Modifikator deaktivieren)</title>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>void <function>unregister_modifier</function></funcdef>
|
|
<paramdef>string <parameter>name</parameter></paramdef>
|
|
</funcprototype>
|
|
</funcsynopsis>
|
|
<para>
|
|
Wird verwendet, um registrierte Variablen-Modifikatoren auszuschalten.
|
|
Übergeben Sie dazu den Modifikator-Namen.
|
|
</para>
|
|
<example>
|
|
<title>unregister_modifier</title>
|
|
<programlisting>
|
|
|
|
// Verhindern, dass Template-Designer 'strip_tags' anwenden
|
|
|
|
$smarty->unregister_modifier("strip_tags");</programlisting>
|
|
</example>
|
|
</sect1>
|
|
<sect1 id="api.unregister.outputfilter">
|
|
<title>unregister_outputfilter (Ausgabefilter deaktivieren)</title>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>void <function>unregister_outputfilter</function></funcdef>
|
|
<paramdef>string <parameter>function_name</parameter></paramdef>
|
|
</funcprototype>
|
|
</funcsynopsis>
|
|
<para>
|
|
|
|
Wird verwendet, um registrierte Ausgabefilter auszuschalten.
|
|
</para>
|
|
</sect1>
|
|
<sect1 id="api.unregister.postfilter">
|
|
<title>unregister_postfilter ('post'-Filter deaktivieren)</title>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>void <function>unregister_postfilter</function></funcdef>
|
|
<paramdef>string <parameter>function_name</parameter></paramdef>
|
|
</funcprototype>
|
|
</funcsynopsis>
|
|
<para>
|
|
|
|
Wird verwendet, um registrierte 'post'-Filter auszuschalten.
|
|
</para>
|
|
</sect1>
|
|
<sect1 id="api.unregister.prefilter">
|
|
<title>unregister_prefilter ('pre'-Filter deaktiviern)</title>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>void <function>unregister_prefilter</function></funcdef>
|
|
<paramdef>string <parameter>function_name</parameter></paramdef>
|
|
</funcprototype>
|
|
</funcsynopsis>
|
|
<para>
|
|
|
|
Wird verwendet, um registrierte 'pre'-Filter auszuschalten.
|
|
</para>
|
|
</sect1>
|
|
<sect1 id="api.unregister.resource">
|
|
<title>unregister_resource (Ressource deaktivieren)</title>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>void <function>unregister_resource</function></funcdef>
|
|
<paramdef>string <parameter>name</parameter></paramdef>
|
|
</funcprototype>
|
|
</funcsynopsis>
|
|
<para>
|
|
Wird verwendet, um registrierte Ressourcen auszuschalten.
|
|
Übergeben Sie dazu den Namen der Ressource.
|
|
</para>
|
|
<example>
|
|
<title>unregister_resource (Ressource deaktivieren)</title>
|
|
<programlisting>
|
|
$smarty->unregister_resource("db");</programlisting>
|
|
</example>
|
|
</sect1>
|
|
</chapter>
|
|
|
|
<chapter id="caching">
|
|
<title>Caching</title>
|
|
<para>
|
|
Caching wird verwendet, um <link linkend="api.display">display()</link> oder
|
|
<link linkend="api.fetch">fetch()</link> Aufrufe durch zwischenspeichern (cachen)
|
|
der Ausgabe in einer Datei zu beschleunigen. Falls eine gecachte Version
|
|
des Aufrufs existiert, wird diese ausgegeben, anstatt die Ausgabe neu zu generieren.
|
|
Caching kann die Performance vor allem dann deutlich verbessern, wenn Templates
|
|
längere Rechenzeit beanspruchen. Weil die Ausgabe von display() und fetch() gecached
|
|
wird, kann ein Cache verschiedene Templates, Konfigurationsdateien usw. enthalten.
|
|
</para>
|
|
<para>
|
|
Da Templates dynamisch sind ist es wichtig darauf zu achten, welche Inhalte
|
|
für für wie lange gecached werden sollen. Wenn sich zum Beispiel die erste Seite Ihrer Website
|
|
nur sporadisch ändert, macht es Sinn die Seite für eine
|
|
Stunde oder länger zu cachen. Wenn Sie aber eine Seite mit sich minütlich
|
|
erneuernden Wetterinformationen haben, macht es möglicherweise keinen Sinn,
|
|
die Seite überhaupt zu cachen.
|
|
</para>
|
|
<sect1 id="caching.setting.up">
|
|
<title>Caching einrichten</title>
|
|
<para>
|
|
Als erstes muss das Caching eingeschaltet werden. Dies erreicht man, indem
|
|
<link linkend="variable.caching">$caching</link> auf 'true' (oder 1) gesetzt wird.
|
|
</para>
|
|
<example>
|
|
<title>Caching einschalten</title>
|
|
<programlisting>
|
|
require('Smarty.class.php');
|
|
$smarty = new Smarty;
|
|
|
|
$smarty->caching = true;
|
|
|
|
$smarty->display('index.tpl');</programlisting>
|
|
</example>
|
|
<para>
|
|
Wenn Caching eingeschaltet ist, wird der Funktionsaufruf display('index.tpl')
|
|
das Template normal rendern, zur selben Zeit jedoch auch eine Datei mit
|
|
dem Inhalt in das <link linkend="variable.cache.dir">$cache_dir</link> schreiben
|
|
(als gecachte Kopie). Beim nächsten Aufruf von display('index.tpl') wird die
|
|
gecachte Kopie verwendet.
|
|
</para>
|
|
<note>
|
|
<title>Technische Bemerkung</title>
|
|
<para>
|
|
Die im '$cache_dir' abgelegen Dateien haben einen ähnlichen Namen
|
|
wie das Template, mit dem sie erzeugt wurden. Obwohl sie eine '.php'-Endung
|
|
aufweisen, sind sie keine ausführbaren PHP-Skripte.
|
|
Editieren Sie diese Dateien NICHT!
|
|
</para>
|
|
</note>
|
|
<para>
|
|
Jede gecachte Seite hat eine Lebensdauer, die von <link linkend="variable.cache.lifetime">$cache_lifetime</link>
|
|
bestimmt wird. Normalerweise beträgt der Wert 3600 Sekunden (= 1 Stunde). Nach Ablauf dieser Lebensdauer
|
|
wird der Cache neu generiert. Sie können die Lebensdauer pro Cache bestimmen indem Sie '$caching'
|
|
auf 2 setzen. Konsultieren Sie den Abschnitt über <link linkend="variable.cache.lifetime">$cache_lifetime</link>
|
|
für weitere Informationen.
|
|
</para>
|
|
<example>
|
|
<title>'$cache_lifetime' pro Cache einstellen</title>
|
|
<programlisting>
|
|
require('Smarty.class.php');
|
|
$smarty = new Smarty;
|
|
|
|
$smarty->caching = 2; // Lebensdauer ist pro Cache
|
|
|
|
|
|
// Standardwert für '$cache_lifetime' auf 15 Minuten setzen
|
|
$smarty->cache_lifetime = 300;
|
|
$smarty->display('index.tpl');
|
|
|
|
|
|
// '$cache_lifetime' für 'home.tpl' auf 1 Stunde setzen
|
|
$smarty->cache_lifetime = 3600;
|
|
$smarty->display('home.tpl');
|
|
|
|
// ACHTUNG: die folgende Zuweisung an '$cache_lifetime' wird nicht funktionieren,
|
|
// wenn '$caching' auf 2 gestellt ist. Wenn die '$cache_lifetime' für 'home.tpl' bereits
|
|
// auf 1 Stunde gesetzt wurde, werden neue Werte ignoriert.
|
|
// 'home.tpl' wird nach dieser Zuweisung immer noch eine '$cache_lifetime' von 1 Stunde haben.
|
|
$smarty->cache_lifetime = 30; // 30 Sekunden
|
|
$smarty->display('home.tpl');</programlisting>
|
|
</example>
|
|
<para>
|
|
Wenn <link linkend="variable.compile.check">$compile_check</link> eingeschaltet ist,
|
|
werden alle in den Cache eingeflossenen Templates und Konfigurationsdateien
|
|
hinsichtlich ihrer letzten änderung überprüft.
|
|
Falls eine der Dateien seit der Erzeugung des Cache geändert wurde,
|
|
wird der Cache unverzüglich neu generiert. Dadurch ergibt sich ein
|
|
geringer Mehraufwand. Für optimale Performace sollte '$compile_check'
|
|
deshalb auf 'false' gesetzt werden.
|
|
</para>
|
|
<example>
|
|
<title>'$compile_check' einschalten</title>
|
|
<programlisting>
|
|
require('Smarty.class.php');
|
|
$smarty = new Smarty;
|
|
|
|
$smarty->caching = true;
|
|
$smarty->compile_check = true;
|
|
|
|
$smarty->display('index.tpl');</programlisting>
|
|
</example>
|
|
<para>
|
|
Wenn <link linkend="variable.force.compile">$force_compile</link> eingeschaltet ist,
|
|
werden die Cache-Dateien immer neu generiert und das Caching damit wirkungslos gemacht.
|
|
'$force_compile' wird normalerweise nur für die Fehlersuche verwendet.
|
|
Ein effizienterer Weg das Caching auszuschalten wäre,
|
|
<link linkend="variable.caching">$caching</link> auf 'false' (oder 0) zu setzen.
|
|
</para>
|
|
<para>
|
|
Mit der Funktion <link linkend="api.is.cached">is_cached()</link> kann überprüft
|
|
werden, ob von einem Template eine gecachte Version vorliegt.
|
|
In einem Template, das zum Beispiel Daten aus einer Datenbank bezieht,
|
|
können Sie diese Funktion verwenden, um den Prozess zu überspringen.
|
|
</para>
|
|
<example>
|
|
<title>is_cached() verwenden</title>
|
|
<programlisting>
|
|
require('Smarty.class.php');
|
|
$smarty = new Smarty;
|
|
|
|
$smarty->caching = true;
|
|
|
|
if(!$smarty->is_cached('index.tpl')) {
|
|
|
|
// kein Cache gefunden, also Variablen zuweisen
|
|
$contents = get_database_contents();
|
|
$smarty->assign($contents);
|
|
}
|
|
|
|
$smarty->display('index.tpl');</programlisting>
|
|
</example>
|
|
<para>
|
|
Mit der <link linkend="language.function.insert">insert</link> Funktion können Sie
|
|
Teile einer Seite dynamisch halten. Wenn zum Beispiel ein Banner in einer gecachten Seite
|
|
nicht gecached werden soll, kann dessen Aufruf mit 'insert' dynamisch gehalten werden.
|
|
Konsultieren Sie den Abschnitt über <link linkend="language.function.insert">insert</link>
|
|
für weitere Informationen und Beispiele.
|
|
</para>
|
|
<para>
|
|
Mit der Funktion <link linkend="api.clear.all.cache">clear_all_cache()</link> können
|
|
Sie den gesamten Template-Cache löschen. Mit <link linkend="api.clear.cache">clear_cache()</link>
|
|
einzelne Templates oder Template-Gruppen.
|
|
</para>
|
|
<example>
|
|
<title>Cache leeren</title>
|
|
<programlisting>
|
|
require('Smarty.class.php');
|
|
$smarty = new Smarty;
|
|
|
|
$smarty->caching = true;
|
|
|
|
|
|
// alle Cache-Dateien löschen
|
|
$smarty->clear_all_cache();
|
|
|
|
|
|
// nur Cache von 'index.tpl' löschen
|
|
$smarty->clear_cache('index.tpl');
|
|
|
|
$smarty->display('index.tpl');</programlisting>
|
|
</example>
|
|
</sect1>
|
|
<sect1 id="caching.multiple.caches">
|
|
<title>Multiple Caches für eine Seite</title>
|
|
<para>
|
|
Sie können für Aufrufe von 'display()' oder 'fetch()' auch mehrere Caches erzeugen.
|
|
Nehmen wir zum Beispiel an, der Aufruf von display('index.tpl') erzeuge für
|
|
verschieden Fälle unterschiedliche Inhalte und Sie wollen jeden dieser Inhalte
|
|
separat cachen. Um dies zu erreichen, können Sie eine 'cache_id' beim Funktionsaufruf
|
|
übergeben.
|
|
</para>
|
|
<example>
|
|
<title>'display()' eine 'cache_id' übergeben</title>
|
|
<programlisting>
|
|
require('Smarty.class.php');
|
|
$smarty = new Smarty;
|
|
|
|
$smarty->caching = true;
|
|
|
|
$my_cache_id = $_GET['article_id'];
|
|
|
|
$smarty->display('index.tpl', $my_cache_id);</programlisting>
|
|
</example>
|
|
<para>
|
|
Im oberen Beispiel übergeben wir die Variable '$my_cache_id'
|
|
als 'cache_id' an 'display()'. Für jede einmalige 'cache_id'
|
|
wird ein eigener Cache von 'index.tpl' erzeugt. In diesem
|
|
Beispiel wurde 'article_id' per URL übergeben und als 'cache_id' verwendet.
|
|
</para>
|
|
<note>
|
|
<title>Technische Bemerkung</title>
|
|
<para>
|
|
Seien Sie vorsichtig, wenn Sie Smarty (oder jeder anderen PHP-Applikation)
|
|
Werte direkt vom Client (Webbrowser) übergeben. Obwohl das Beispiel oben
|
|
praktisch aussehen mag, kann es schwerwiegende Konsequenzen haben. Die 'cache_id'
|
|
wird verwendet, um im Dateisystem ein Verzeichnis zu erstellen. Wenn ein Benutzer
|
|
also überlange Werte übergibt oder ein Skript benutzt, das in hohem
|
|
Tempo neue 'article_ids' übermittelt, kann dies auf dem Server zu Problemen
|
|
führen. Stellen Sie daher sicher, dass Sie alle empfangenen Werte auf
|
|
ihre Gültigkeit überprüfen und unerlaubte Sequenzen entfernen.
|
|
Sie wissen möglicherweise, dass ihre 'article_id' nur 10 Zeichen lang sein kann, nur
|
|
aus alphanumerischen Zeichen bestehen darf und in der Datenbank eingetragen
|
|
sein muss. überpüfen sie das!
|
|
</para>
|
|
</note>
|
|
<para>
|
|
Denken Sie daran, Aufrufen von <link linkend="api.is.cached">is_cached()</link>
|
|
und <link linkend="api.clear.cache">clear_cache()</link> als zweiten Parameter
|
|
die 'cache_id' zu übergeben.
|
|
</para>
|
|
<example>
|
|
<title>'is_cached()' mit 'cache_id' aufrufen</title>
|
|
<programlisting>
|
|
require('Smarty.class.php');
|
|
$smarty = new Smarty;
|
|
|
|
$smarty->caching = true;
|
|
|
|
$my_cache_id = $_GET['article_id'];
|
|
|
|
if(!$smarty->is_cached('index.tpl', $my_cache_id)) {
|
|
|
|
// kein Cache gefunden, also Variablen zuweisen
|
|
$contents = get_database_contents();
|
|
$smarty->assign($contents);
|
|
}
|
|
|
|
$smarty->display('index.tpl', $my_cache_id);</programlisting>
|
|
</example>
|
|
<para>
|
|
Sie können mit 'clear_cache()' den gesamten Cache einer bestimmten 'cache_id'
|
|
auf einmal löschen, wenn Sie als Parameter die 'cache_id' übergeben.
|
|
</para>
|
|
<example>
|
|
<title>Cache einer bestimmten 'cache_id' leeren</title>
|
|
<programlisting>
|
|
require('Smarty.class.php');
|
|
$smarty = new Smarty;
|
|
|
|
$smarty->caching = true;
|
|
|
|
|
|
// Cache mit 'sports' als 'cache_id' löschen
|
|
$smarty->clear_cache(null, "sports");
|
|
|
|
$smarty->display('index.tpl', "sports");</programlisting>
|
|
</example>
|
|
<para>
|
|
Indem Sie allen dieselbe 'cache_id' übergeben, lassen sich Caches gruppieren.
|
|
</para>
|
|
</sect1>
|
|
<sect1 id="caching.groups">
|
|
<title>Cache-Gruppen</title>
|
|
<para>
|
|
Sie können auch eine feinere Gruppierung vornehmen, indem Sie
|
|
'cache_id'-Gruppen erzeugen. Dies erreichen Sie, indem Sie jede Cache-Untergruppe
|
|
durch ein '|'-Zeichen (pipe) in der 'cache_id' abtrennen. Sie können so viele
|
|
Untergruppen erstellen, wie Sie möchten.
|
|
</para>
|
|
<example>
|
|
<title>'cache_id'-Gruppen</title>
|
|
<programlisting>
|
|
require('Smarty.class.php');
|
|
$smarty = new Smarty;
|
|
|
|
$smarty->caching = true;
|
|
|
|
|
|
// leere alle Caches welche 'sports|basketball' als erste zwei 'cache_id'-Gruppen enthalten
|
|
$smarty->clear_cache(null, "sports|basketball");
|
|
|
|
// leere alle Caches welche 'sports' als erste 'cache_id'-Gruppe haben. Dies schliesst
|
|
// 'sports|basketball', oder 'sports|(anything)|(anything)|(anything)|...' ein
|
|
$smarty->clear_cache(null, "sports");
|
|
|
|
$smarty->display('index.tpl',"sports|basketball");</programlisting>
|
|
</example>
|
|
<note>
|
|
<title>Technische Bemerkung</title>
|
|
<para>
|
|
Cache-Gruppierung benutzt nicht den Pfad zum Template für die 'cache_id'. Wenn Sie
|
|
zum Beispiel display('themes/blue/index.tpl') aufrufen, können Sie NICHT
|
|
den ganzen Cache unter 'themes/blue' leeren. Wenn Sie dies tun möchten,
|
|
müssen Sie die Caches anhand der 'cache_id' gruppieren - zum Beispiel
|
|
display('themes/blue/index.tpl','themes|blue');
|
|
Danach können Sie alle Caches des 'blue-theme' mit clear_cache(null, 'themes|blue');
|
|
leeren.
|
|
</para>
|
|
</note>
|
|
</sect1>
|
|
</chapter>
|
|
<chapter id="advanced.features">
|
|
<title>Advanced Features</title>
|
|
<sect1 id="advanced.features.prefilters">
|
|
<title>'pre'-Filter</title>
|
|
<para>
|
|
Template 'pre'-Filter sind Filter, welche auf das Template vor dessen Kompilierung
|
|
angewendet werden. Dies ist nützlich, um zum Beispiel Kommentare zu entfernen
|
|
oder um den Inhalt des Templates zu analysieren. 'pre'-Filter können auf verschiedene
|
|
Arten geladen werden. Man kann sie <link linkend="api.register.prefilter">registrieren</link>,
|
|
aus dem Plugin-Verzeichnis mit <link linkend="api.load.filter">load_filter()</link> laden
|
|
oder <link linkend="variable.autoload.filters">$autoload_filters</link> verwenden.
|
|
Smarty übergibt der Funktion als ersten Parameter den Template-Quellcode und erwartet
|
|
als Rückgabewert den bearbeiteten Quellcode.
|
|
</para>
|
|
<example>
|
|
<title>Template 'pre'-Filter verwenden</title>
|
|
<programlisting>
|
|
<?php
|
|
|
|
// fügen Sie folgende Zeilen in Ihre Applikation ein
|
|
function remove_dw_comments($tpl_source, &$smarty)
|
|
{
|
|
return preg_replace("/<!--#.*-->/U","",$tpl_source);
|
|
}
|
|
|
|
|
|
// registrieren Sie den 'pre'-Filter
|
|
$smarty->register_prefilter("remove_dw_comments");
|
|
$smarty->display("index.tpl");
|
|
?>
|
|
|
|
{* Smarty Template 'index.tpl' *}
|
|
|
|
<!--# diese Zeile wird vom 'pre'-Filter entfernt--></programlisting>
|
|
</example>
|
|
</sect1>
|
|
|
|
<sect1 id="advanced.features.postfilters">
|
|
<title>'post'-Filter</title>
|
|
<para>
|
|
Template 'post'-Filter sind Filter, welche auf das Template nach dessen Kompilierung
|
|
angewendet werden. 'post'-Filter können auf verschiedene Arten
|
|
geladen werden. Man kann sie <link linkend="api.register.prefilter">registrieren</link>,
|
|
aus dem Plugin-Verzeichnis mit <link linkend="api.load.filter">load_filter()</link> laden
|
|
oder <link linkend="variable.autoload.filters">$autoload_filters</link> verwenden.
|
|
Smarty übergibt der Funktion als ersten Parameter den Template-Quellcode und erwartet
|
|
als Rückgabewert den bearbeiteten Quellcode.
|
|
</para>
|
|
<example>
|
|
<title>Template 'post'-Filter verwenden</title>
|
|
<programlisting>
|
|
<?php
|
|
|
|
// fügen Sie folgende Zeilen in Ihre Applikation ein
|
|
function add_header_comment($tpl_source, &$smarty)
|
|
{
|
|
return "<?php echo \"<!-- Created by Smarty! -->\n\" ?>\n".$tpl_source;
|
|
}
|
|
|
|
|
|
// registrieren Sie den 'post'-Filter
|
|
$smarty->register_postfilter("add_header_comment");
|
|
$smarty->display("index.tpl");
|
|
?>
|
|
|
|
{* kompiliertes Smarty Template 'index.tpl' *}
|
|
<!-- Created by Smarty! -->
|
|
{* Rest des Template Inhalts... *}</programlisting>
|
|
</example>
|
|
</sect1>
|
|
|
|
<sect1 id="advanced.features.outputfilters">
|
|
<title>Ausgabefilter</title>
|
|
<para>
|
|
Wenn ein Template mit 'display()' oder 'fetch()' benutzt wird, kann die
|
|
Ausgabe durch verschieden Ausgabefilter geschleust werden. Der Unterschied zu
|
|
'post'-Filtern ist, dass Ausgabefilter auf die durch 'fetch()' oder
|
|
'display()' erzeugte Ausgabe angewendet werden, 'post'-Filter aber auf das Kompilat vor
|
|
seiner Speicherung im Dateisystem.
|
|
</para>
|
|
|
|
<para>
|
|
Ausgabefilter können auf verschiede Arten
|
|
geladen werden. Man kann sie <link linkend="api.register.prefilter">registrieren</link>,
|
|
aus dem Plugin-Verzeichnis mit <link linkend="api.load.filter">load_filter()</link> laden
|
|
oder <link linkend="variable.autoload.filters">$autoload_filters</link> verwenden.
|
|
Smarty übergibt der Funktion als ersten Parameter die Template-Ausgabe und erwartet
|
|
als Rückgabewert die bearbeitete Ausgabe.
|
|
</para>
|
|
<example>
|
|
<title>Ausgabefilter verwenden</title>
|
|
<programlisting>
|
|
<?php
|
|
|
|
// fügen Sie folgende Zeilen in Ihre Applikation ein
|
|
function protect_email($tpl_output, &$smarty)
|
|
{
|
|
$tpl_output =
|
|
preg_replace('!(\S+)@([a-zA-Z0-9\.\-]+\.([a-zA-Z]{2,3}|[0-9]{1,3}))!',
|
|
'$1%40$2', $tpl_output);
|
|
return $tpl_output;
|
|
}
|
|
|
|
|
|
// Ausgabefilter registrieren
|
|
$smarty->register_outputfilter("protect_email");
|
|
$smarty->display("index.tpl");
|
|
|
|
// von nun an erhalten alle ausgegebenen e-mail Adressen einen
|
|
// einfach Schutz vor Spambots.
|
|
?></programlisting>
|
|
</example>
|
|
</sect1>
|
|
<sect1 id="section.template.cache.handler.func">
|
|
<title>Cache Handler Funktion</title>
|
|
<para>
|
|
Als Alternative zum normalen dateibasierten Caching-Mechanismus können Sie
|
|
eine eigene Cache-Handler Funktion zum lesen, schreiben und löschen von
|
|
Cache-Dateien definieren.
|
|
</para>
|
|
<para>
|
|
Schreiben Sie eine Funktion in Ihrer Applikation, die Smarty als
|
|
Cache-Handler verwenden soll und weisen Sie deren Name der Variable
|
|
<link linkend="variable.cache.handler.func">$cache_handler_func</link> zu.
|
|
Smarty wird von da an Ihre Funktion zur Bearbeitung des Caches verwenden.
|
|
Als erster Parameter wird die 'action' mit einem der folgendende Werte
|
|
übergeben: 'read', 'write' und 'clear'. Als zweiter Parameter
|
|
wird das Smarty-Objekt übergeben, als dritter der gecachte Inhalt. Bei einem
|
|
'write' übergibt Smarty den gecachten Inhalt, bei 'read' übergibt Smarty die
|
|
Variable als Referenz und erwartet, dass Ihre Funktion die Inhalte zuweist.
|
|
Bei 'clear' können Sie eine dummy-Variable übergeben. Als vierter Parameter
|
|
wird der Template-Name übergeben (verwendet bei 'write'/'read'), als fünfter
|
|
Parameter die 'cache_id' (optional) und als sechster die 'compile_id' (auch optional).
|
|
</para>
|
|
<example>
|
|
<title>Beispiel mit einer MySQL Datenbank als Datenquelle</title>
|
|
<programlisting>
|
|
<?php
|
|
/*
|
|
|
|
Beispiel Anwendung:
|
|
|
|
include('Smarty.class.php');
|
|
include('mysql_cache_handler.php');
|
|
|
|
$smarty = new Smarty;
|
|
$smarty->cache_handler_func = 'mysql_cache_handler';
|
|
|
|
$smarty->display('index.tpl');
|
|
|
|
|
|
|
|
die Datenbank hat folgendes Format:
|
|
|
|
create database SMARTY_CACHE;
|
|
|
|
create table CACHE_PAGES(
|
|
CacheID char(32) PRIMARY KEY,
|
|
CacheContents MEDIUMTEXT NOT NULL
|
|
);
|
|
|
|
*/
|
|
|
|
function mysql_cache_handler($action, &$smarty_obj, &$cache_content, $tpl_file=null, $cache_id=null, $compile_id=null)
|
|
{
|
|
|
|
// Datenbank Host, Benutzer und Passwort festlegen
|
|
$db_host = 'localhost';
|
|
$db_user = 'myuser';
|
|
$db_pass = 'mypass';
|
|
$db_name = 'SMARTY_CACHE';
|
|
$use_gzip = false;
|
|
|
|
|
|
// enmalige 'cache_id' erzeugen
|
|
$CacheID = md5($tpl_file.$cache_id.$compile_id);
|
|
|
|
if(! $link = mysql_pconnect($db_host, $db_user, $db_pass)) {
|
|
$smarty_obj->_trigger_error_msg("cache_handler: could not connect to database");
|
|
return false;
|
|
}
|
|
mysql_select_db($db_name);
|
|
|
|
switch ($action) {
|
|
case 'read':
|
|
|
|
// Cache aus der Datenbank lesen
|
|
$results = mysql_query("select CacheContents from CACHE_PAGES where CacheID='$CacheID'");
|
|
if(!$results) {
|
|
$smarty_obj->_trigger_error_msg("cache_handler: query failed.");
|
|
}
|
|
$row = mysql_fetch_array($results,MYSQL_ASSOC);
|
|
|
|
if($use_gzip && function_exists("gzuncompress")) {
|
|
$cache_contents = gzuncompress($row["CacheContents"]);
|
|
} else {
|
|
$cache_contents = $row["CacheContents"];
|
|
}
|
|
$return = $results;
|
|
break;
|
|
case 'write':
|
|
|
|
// Cache in Datenbank speichern
|
|
if($use_gzip && function_exists("gzcompress")) {
|
|
// compress the contents for storage efficiency
|
|
$contents = gzcompress($cache_content);
|
|
} else {
|
|
$contents = $cache_content;
|
|
}
|
|
$results = mysql_query("replace into CACHE_PAGES values(
|
|
'$CacheID',
|
|
'".addslashes($contents)."')
|
|
");
|
|
if(!$results) {
|
|
$smarty_obj->_trigger_error_msg("cache_handler: query failed.");
|
|
}
|
|
$return = $results;
|
|
break;
|
|
case 'clear':
|
|
|
|
// Cache Informationen löschen
|
|
if(empty($cache_id) && empty($compile_id) && empty($tpl_file)) {
|
|
|
|
// alle löschen
|
|
$results = mysql_query("delete from CACHE_PAGES");
|
|
} else {
|
|
$results = mysql_query("delete from CACHE_PAGES where CacheID='$CacheID'");
|
|
}
|
|
if(!$results) {
|
|
$smarty_obj->_trigger_error_msg("cache_handler: query failed.");
|
|
}
|
|
$return = $results;
|
|
break;
|
|
default:
|
|
|
|
// Fehler, unbekannte 'action'
|
|
$smarty_obj->_trigger_error_msg("cache_handler: unknown action \"$action\"");
|
|
$return = false;
|
|
break;
|
|
}
|
|
mysql_close($link);
|
|
return $return;
|
|
|
|
}
|
|
|
|
?></programlisting>
|
|
</example>
|
|
</sect1>
|
|
<sect1 id="template.resources">
|
|
<title>Ressourcen</title>
|
|
<para>
|
|
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.
|
|
</para>
|
|
<sect2 id="templates.from.template.dir">
|
|
<title>Templates aus dem '$template_dir'</title>
|
|
<para>
|
|
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.
|
|
</para>
|
|
<example>
|
|
<title>Templates aus '$template_dir' verwenden</title>
|
|
<programlisting>
|
|
|
|
// 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 *}</programlisting>
|
|
</example>
|
|
</sect2>
|
|
<sect2 id="templates.from.any.dir">
|
|
<title>Templates aus beliebigen Verzeichnissen</title>
|
|
<para>
|
|
Templates ausserhalb von '$template_dir' benötigen den 'file:' Ressourcen-Typ,
|
|
gefolgt von absolutem Pfadnamen und Templatenamen.
|
|
</para>
|
|
<example>
|
|
<title>Templates aus beliebigen Verzeichnissen benutzen</title>
|
|
<programlisting>
|
|
|
|
// 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"}</programlisting>
|
|
</example>
|
|
|
|
<sect3>
|
|
<title>Windows Dateipfade</title>
|
|
<para>
|
|
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.
|
|
</para>
|
|
<example>
|
|
<title>Templates aus Windows Dateipfaden verwenden</title>
|
|
<programlisting>
|
|
|
|
// 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"}</programlisting>
|
|
</example>
|
|
</sect3>
|
|
</sect2>
|
|
|
|
<sect2 id="templates.from.elsewhere">
|
|
<title>Templates aus anderen Quellen</title>
|
|
<para>
|
|
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.
|
|
</para>
|
|
|
|
<para>
|
|
Konsultieren Sie den Abschnitt über <link linkend="plugins.resources">Ressource-Plugins</link>
|
|
für mehr Informationen über die Funktionalitäten, die ein derartiges Plugin bereitstellen muss.
|
|
</para>
|
|
|
|
<note>
|
|
<para>
|
|
Achtung: Sie können die interne <literal>file</literal> 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.
|
|
</para>
|
|
</note>
|
|
<example>
|
|
<title>Eigene Quellen verwenden</title>
|
|
<programlisting>
|
|
|
|
// 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"}</programlisting>
|
|
</example>
|
|
</sect2>
|
|
|
|
<sect2 id="default.template.handler.function">
|
|
<title>Standard Template-Handler</title>
|
|
<para>
|
|
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.
|
|
</para>
|
|
<example>
|
|
<title>Standard Template-Handler verwenden</title>
|
|
<programlisting>
|
|
<?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';
|
|
?></programlisting>
|
|
</example>
|
|
</sect2>
|
|
</sect1>
|
|
</chapter>
|
|
|
|
<chapter id="plugins">
|
|
<title>Smarty durch Plugins erweitern</title>
|
|
<para>
|
|
In Version 2.0 wurde die Plugin-Architektur eingeführt, welche für fast alle anpassbaren Funktionalitäten
|
|
verwendet wird. Unter anderem:
|
|
<itemizedlist spacing=compact>
|
|
<listitem><simpara>Funktionen</simpara></listitem>
|
|
<listitem><simpara>Modifikatoren</simpara></listitem>
|
|
<listitem><simpara>Block-Funktionen</simpara></listitem>
|
|
<listitem><simpara>Compiler-Funktionen</simpara></listitem>
|
|
<listitem><simpara>'pre'-Filter</simpara></listitem>
|
|
<listitem><simpara>'post'-Filter</simpara></listitem>
|
|
<listitem><simpara>Ausgabefilter</simpara></listitem>
|
|
<listitem><simpara>Ressourcen</simpara></listitem>
|
|
<listitem><simpara>Inserts</simpara></listitem>
|
|
</itemizedlist>
|
|
Für die Abwärtskompatibilität wurden das register_* API zur Funktions-Registrierung
|
|
beibehalten. Haben Sie früher nicht die API-Funktionen benutzt, sondern die Klassen-Variablen
|
|
<literal>$custom_funcs</literal>, <literal>$custom_mods</literal> und andere direkt
|
|
geändert, müssen Sie Ihre Skripte so anpassen, dass diese das API verwenden.
|
|
Oder sie implementieren die Funktionalitäten alternativ mit Plugins.
|
|
|
|
</para>
|
|
|
|
<sect1>
|
|
<title>Wie Plugins funktionieren</title>
|
|
<para>
|
|
Plugins werden immer erst bei Bedarf geladen. Nur die im Template
|
|
verwendeten Funktionen, Ressourcen, Variablen-Modifikatoren, etc. werden geladen.
|
|
Des weiteren wird jedes Plugin nur einmal geladen, selbst wenn mehrere Smarty-Instanzen
|
|
im selben Request erzeugt werden.
|
|
</para>
|
|
<para>
|
|
'pre'/'post'-Filter machen die Ausnahme. Da sie in den Templates nicht direkt
|
|
erwähnt werden, müssen sie zu Beginn der Ausführung explizit via API geladen oder
|
|
registriert werden. Die Reihenfolge der Anwendung mehrerer Filter desselben Typs
|
|
entspricht der Reihenfolge in der sie geladen/registriert wurden.
|
|
</para>
|
|
<para>
|
|
Aus Performancegründen existiert nur ein Plugin-Verzeichnis. Um ein Plugin
|
|
zu installieren, speichern Sie es einfach in diesem Verzeichnis. Smarty wird
|
|
es danach automatisch erkennen.
|
|
</para>
|
|
</sect1>
|
|
|
|
<sect1 id="plugins.naming.conventions">
|
|
<title>Namenskonvention</title>
|
|
<para>
|
|
Plugin-Dateien müssen einer klaren Namenskonvention gehorchen,
|
|
um von Smarty erkannt zu werden.
|
|
</para>
|
|
<para>
|
|
|
|
Die Plugin-Dateien müssen wie folgt benannt werden:
|
|
<blockquote>
|
|
<para>
|
|
<filename>
|
|
<replaceable>type</replaceable>.<replaceable>name</replaceable>.php
|
|
</filename>
|
|
</para>
|
|
</blockquote>
|
|
</para>
|
|
<para>
|
|
|
|
Wobei <literal>Typ</literal> einen der folgenden Werte haben kann:
|
|
<itemizedlist spacing=compact>
|
|
<listitem><simpara>function</simpara></listitem>
|
|
<listitem><simpara>modifier</simpara></listitem>
|
|
<listitem><simpara>block</simpara></listitem>
|
|
<listitem><simpara>compiler</simpara></listitem>
|
|
<listitem><simpara>prefilter</simpara></listitem>
|
|
<listitem><simpara>postfilter</simpara></listitem>
|
|
<listitem><simpara>outputfilter</simpara></listitem>
|
|
<listitem><simpara>resource</simpara></listitem>
|
|
<listitem><simpara>insert</simpara></listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
<para>
|
|
und <literal>Name</literal> ein erlaubter Identifikator (bestehend
|
|
aus Buchstaben, Zahlen und Unterstrichen) ist.
|
|
</para>
|
|
<para>
|
|
Ein paar Beispiele: <literal>function.html_select_date.php</literal>,
|
|
<literal>resource.db.php</literal>,
|
|
<literal>modifier.spacify.php</literal>.
|
|
</para>
|
|
<para>
|
|
|
|
Die Plugin-Funktion innerhalb das Plugin-Datei muss wie folgt benannt werden:
|
|
<blockquote>
|
|
<para>
|
|
<function>smarty_<replaceable>type</replaceable>_<replaceable>name</replaceable></function>
|
|
</para>
|
|
</blockquote>
|
|
</para>
|
|
<para>
|
|
<literal>type</literal> und <literal>name</literal> haben die selbe Bedeutung wie bei den Plugin-Dateien.
|
|
</para>
|
|
<para>
|
|
Smarty gibt Fehlermeldungen aus, falls ein aufgerufenes Plugin nicht existiert,
|
|
oder eine Datei mit falscher Namensgebung im Verzeichnis gefunden wurde.
|
|
</para>
|
|
</sect1>
|
|
<sect1 id="plugins.writing">
|
|
<title>Plugins schreiben</title>
|
|
<para>
|
|
Plugins können von Smarty automatisch geladen oder
|
|
zur Laufzeit dynamisch mit den register_* API-Funktionen
|
|
registriert werden. Um registrierte Plugins wieder zu entfernen,
|
|
können die unregister_* API-Funktionen verwendet werden.
|
|
</para>
|
|
<para>
|
|
Bei Plugins, die zur Laufzeit geladen werden, müssen keine Namenskonventionen
|
|
beachtet werden.
|
|
</para>
|
|
<para>
|
|
Wenn ein Plugin auf die Funktionalität eines anderen Plugins angewiesen
|
|
ist (wie dies bei manchen Smarty Standard-Plugins der Fall ist), sollte
|
|
folgender Weg gewählt werden, um das benötigte Plugin zu laden:
|
|
</para>
|
|
<programlisting>
|
|
require_once SMARTY_DIR . 'plugins/function.html_options.php';</programlisting>
|
|
<para>
|
|
Das Smarty Objekt wird jedem Plugin immer als letzter Parameter
|
|
übergeben (ausser bei Variablen-Modifikatoren).
|
|
</para>
|
|
</sect1>
|
|
|
|
<sect1 id="plugins.functions"><title>Template-Funktionen</title>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>void <function>smarty_function_<replaceable>name</replaceable></function></funcdef>
|
|
<paramdef>array <parameter>$params</parameter></paramdef>
|
|
<paramdef>object <parameter>&$smarty</parameter></paramdef>
|
|
</funcprototype>
|
|
</funcsynopsis>
|
|
<para>
|
|
Alle einer Funktion übergebenen Parameter werden in der Variable
|
|
<parameter>$params</parameter> als assoziatives Array abgelegt. Sie können
|
|
auf diese Werte entweder direkt mit <varname>$params['start']</varname> zugreifen
|
|
oder sie mit <varname>extract($params)</varname> in die Symbol-Tabelle importieren.
|
|
</para>
|
|
<para>
|
|
Die Ausgabe der Funktion wird verwendet, um das Funktions-Tag im Template
|
|
(<function>fetch</function> Funktion, zum Beispiel) zu ersetzen.
|
|
Alternativ kann sie auch etwas tun, ohne eine Ausgabe zurückzuliefern
|
|
(<function>assign</function> Funktion, zum Beispiel).
|
|
</para>
|
|
<para>
|
|
Falls die Funktion dem Template Variablen zuweisen oder
|
|
auf eine andere Smarty-Funktionalität zugreifen möchte, kann dazu das
|
|
übergebene <parameter>$smarty</parameter> Objekt verwendet werden.
|
|
</para>
|
|
<para>
|
|
|
|
Sehen Sie dazu:
|
|
<link linkend="api.register.function">register_function()</link>,
|
|
<link linkend="api.unregister.function">unregister_function()</link>.
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title>Funktionsplugin mit Ausgabe</title>
|
|
<programlisting>
|
|
<?php
|
|
/*
|
|
* Smarty plugin
|
|
* -------------------------------------------------------------
|
|
* File: function.eightball.php
|
|
* Type: function
|
|
* Name: eightball
|
|
* Purpose: outputs a random magic answer
|
|
* -------------------------------------------------------------
|
|
*/
|
|
function smarty_function_eightball($params, &$smarty)
|
|
{
|
|
$answers = array('Yes',
|
|
'No',
|
|
'No way',
|
|
'Outlook not so good',
|
|
'Ask again soon',
|
|
'Maybe in your reality');
|
|
|
|
$result = array_rand($answers);
|
|
echo $answers[$result];
|
|
}
|
|
?></programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
|
|
Es kann im Template wie folgt angewendet werden:
|
|
</para>
|
|
<programlisting>
|
|
Question: Will we ever have time travel?
|
|
Answer: {eightball}.</programlisting>
|
|
<para>
|
|
<example>
|
|
<title>Funktionsplugin ohne Ausgabe</title>
|
|
<programlisting>
|
|
<?php
|
|
/*
|
|
* Smarty plugin
|
|
* -------------------------------------------------------------
|
|
* File: function.assign.php
|
|
* Type: function
|
|
* Name: assign
|
|
* Purpose: assign a value to a template variable
|
|
* -------------------------------------------------------------
|
|
*/
|
|
function smarty_function_assign($params, &$smarty)
|
|
{
|
|
extract($params);
|
|
|
|
if (empty($var)) {
|
|
$smarty->trigger_error("assign: missing 'var' parameter");
|
|
return;
|
|
}
|
|
|
|
if (!in_array('value', array_keys($params))) {
|
|
$smarty->trigger_error("assign: missing 'value' parameter");
|
|
return;
|
|
}
|
|
|
|
$smarty->assign($var, $value);
|
|
}
|
|
?></programlisting>
|
|
</example>
|
|
</para>
|
|
</sect1>
|
|
|
|
<sect1 id="plugins.modifiers"><title>Variablen-Modifikatoren</title>
|
|
<para>
|
|
Variablen-Modifikatoren sind kleine Funktionen, die auf eine Variable angewendet
|
|
werden, bevor sie ausgegeben oder weiterverwendet wird. Variablen-Modifikatoren können
|
|
aneinadergereiht werden.
|
|
</para>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>mixed <function>smarty_modifier_<replaceable>name</replaceable></function></funcdef>
|
|
<paramdef>mixed <parameter>$value</parameter></paramdef>
|
|
<paramdef>[mixed <parameter>$param1</parameter>, ...]</paramdef>
|
|
</funcprototype>
|
|
</funcsynopsis>
|
|
<para>
|
|
Der erste an das Modifikator-Plugin übergebene Parameter ist der
|
|
Wert mit welchem er arbeiten soll. Die restlichen Parameter sind optional
|
|
und hängen von den durchzuführenden Operationen ab.
|
|
</para>
|
|
<para>
|
|
|
|
Der Modifikator muss das Resultat seiner Verarbeitung zurückgeben.
|
|
</para>
|
|
<para>
|
|
Sehen Sie dazu:
|
|
<link linkend="api.register.modifier">register_modifier()</link>,
|
|
<link linkend="api.unregister.modifier">unregister_modifier()</link>.
|
|
</para>
|
|
<example>
|
|
<title>Einfaches Modifikator-Plugin</title>
|
|
<para>
|
|
Dieses Plugin dient als Alias einer PHP-Funktion und erwartet keine
|
|
zusätzlichen Parameter.
|
|
</para>
|
|
<programlisting>
|
|
<?php
|
|
/*
|
|
* Smarty plugin
|
|
* -------------------------------------------------------------
|
|
* File: modifier.capitalize.php
|
|
* Type: modifier
|
|
* Name: capitalize
|
|
* Purpose: capitalize words in the string
|
|
* -------------------------------------------------------------
|
|
*/
|
|
function smarty_modifier_capitalize($string)
|
|
{
|
|
return ucwords($string);
|
|
}
|
|
?></programlisting>
|
|
</example>
|
|
<para></para>
|
|
<example>
|
|
<title>Komplexes Modifikator-Plugin</title>
|
|
<programlisting>
|
|
<?php
|
|
/*
|
|
* Smarty plugin
|
|
* -------------------------------------------------------------
|
|
* File: modifier.truncate.php
|
|
* Type: modifier
|
|
* Name: truncate
|
|
* Purpose: Truncate a string to a certain length if necessary,
|
|
* optionally splitting in the middle of a word, and
|
|
* appending the $etc string.
|
|
* -------------------------------------------------------------
|
|
*/
|
|
function smarty_modifier_truncate($string, $length = 80, $etc = '...',
|
|
$break_words = false)
|
|
{
|
|
if ($length == 0)
|
|
return '';
|
|
|
|
if (strlen($string) > $length) {
|
|
$length -= strlen($etc);
|
|
$fragment = substr($string, 0, $length+1);
|
|
if ($break_words)
|
|
$fragment = substr($fragment, 0, -1);
|
|
else
|
|
$fragment = preg_replace('/\s+(\S+)?$/', '', $fragment);
|
|
return $fragment.$etc;
|
|
} else
|
|
return $string;
|
|
}
|
|
?></programlisting>
|
|
</example>
|
|
</sect1>
|
|
|
|
<sect1 id="plugins.block.functions"><title>Block-Funktionen</title>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>void <function>smarty_function_<replaceable>name</replaceable></function></funcdef>
|
|
<paramdef>array <parameter>$params</parameter></paramdef>
|
|
<paramdef>mixed <parameter>$content</parameter></paramdef>
|
|
<paramdef>object <parameter>&$smarty</parameter></paramdef>
|
|
</funcprototype>
|
|
</funcsynopsis>
|
|
<para>
|
|
Block-Funktionen sind Funktionen, die in der Form {func} .. {/func} notiert
|
|
werden. Mit anderen Worten umschliessen sie einen Template-Abschnitt und
|
|
arbeiten danach auf dessen Inhalt. Eine Block-Funktion {func} .. {/func}
|
|
kann nicht mir einer gleichnamigen Template-Funktion {func}
|
|
überschrieben werden.
|
|
</para>
|
|
<para>
|
|
Ihre Funktions-Implementation wird von Smarty zweimal
|
|
aufgerufen: einmal für das öffnende und einmal
|
|
für das schliessende Tag.
|
|
</para>
|
|
<para>
|
|
Nur das Öffnungs-Tag kann Attribute enthalten. Alle so übergebenen Attribute
|
|
werden als assoziatives Array <parameter>$params</parameter> der Template-Funktion
|
|
übergeben. Sie können auf die Werte entweder direkt mit <varname>$params['start']</varname>
|
|
zugreifen oder sie mit <varname>extract($params)</varname> in die Symbol-Tabelle
|
|
importieren. Die Attribute aus dem Öffnungs-Tag stehen auch beim Aufruf für das
|
|
schliessende Tag zur Verfügung.
|
|
</para>
|
|
<para>
|
|
Der Inhalt der <parameter>$content</parameter> Variable hängt davon
|
|
ab, ob die Funktion für das öffnende Tag oder für das schliessende
|
|
Tag aufgerufen wird. Für das öffnende Tag ist der Wert <literal>null</literal>,
|
|
für das schliessende Tag ist es der Inhalt des Template-Abschnitts.
|
|
Achtung: Der Template-Abschnitt den Sie erhalten, wurde bereits von
|
|
Smarty bearbeitet. Sie erhalten also die Template-Ausgabe, nicht den Template-Quelltext.
|
|
</para>
|
|
<para>
|
|
Wenn Sie verschachtelte Block-Funktionen haben, können Sie
|
|
die Eltern-Block-Funktion mit der <varname>$smarty->_tag_stack</varname> Variable
|
|
herausfinden. Lassen Sie sich ihren Inhalt mit 'var_dump()' ausgeben.
|
|
Die Struktur sollte selbsterklärend sein.
|
|
</para>
|
|
<para>
|
|
|
|
Sehen Sie dazu:
|
|
<link linkend="api.register.block">register_block()</link>,
|
|
<link linkend="api.unregister.block">unregister_block()</link>.
|
|
</para>
|
|
<example>
|
|
<title>Block-Funktionen</title>
|
|
<programlisting>
|
|
<?php
|
|
/*
|
|
* Smarty plugin
|
|
* -------------------------------------------------------------
|
|
* File: block.translate.php
|
|
* Type: block
|
|
* Name: translate
|
|
* Purpose: translate a block of text
|
|
* -------------------------------------------------------------
|
|
*/
|
|
function smarty_block_translate($params, $content, &$smarty)
|
|
{
|
|
if ($content) {
|
|
$lang = $params['lang'];
|
|
|
|
// den $content irgendwie intelligent übersetzuen
|
|
echo $translation;
|
|
}
|
|
}</programlisting>
|
|
</example>
|
|
</sect1>
|
|
|
|
<sect1 id="plugins.compiler.functions"><title>Compiler-Funktionen</title>
|
|
<para>
|
|
Compiler-Funktionen werden während der Kompilierung des Template
|
|
aufgerufen. Das ist nützlich, um PHP-Code oder zeitkritische statische
|
|
Inhalte in ein Template einzufügen. Sind eine Compiler-Funktion und
|
|
eine eigene Funktion unter dem selben Namen registriert, wird die
|
|
Compiler-Funktion ausgeführt.
|
|
</para>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>mixed <function>smarty_compiler_<replaceable>name</replaceable></function></funcdef>
|
|
<paramdef>string <parameter>$tag_arg</parameter></paramdef>
|
|
<paramdef>object <parameter>&$smarty</parameter></paramdef>
|
|
</funcprototype>
|
|
</funcsynopsis>
|
|
<para>
|
|
Die Compiler-Funktion erhält zwei Parameter: die Tag-Argument Zeichenkette
|
|
- also alles ab dem Funktionsnamen bis zum schliessenden Trennzeichen - und
|
|
das Smarty Objekt. Gibt den PHP-Code zurück, der in das Template eingefügt werden
|
|
soll.
|
|
</para>
|
|
<para>
|
|
|
|
Sehen Sie dazu:
|
|
<link linkend="api.register.compiler.function">register_compiler_function()</link>,
|
|
<link linkend="api.unregister.compiler.function">unregister_compiler_function()</link>.
|
|
</para>
|
|
<example>
|
|
<title>Einfache Compiler-Funktionen</title>
|
|
<programlisting>
|
|
<?php
|
|
/*
|
|
* Smarty plugin
|
|
* -------------------------------------------------------------
|
|
* File: compiler.tplheader.php
|
|
* Type: compiler
|
|
* Name: tplheader
|
|
* Purpose: Output header containing the source file name and
|
|
* the time it was compiled.
|
|
* -------------------------------------------------------------
|
|
*/
|
|
function smarty_compiler_tplheader($tag_arg, &$smarty)
|
|
{
|
|
return "\necho '" . $smarty->_current_file . " compiled at " . date('Y-m-d H:M'). "';";
|
|
}
|
|
?></programlisting>
|
|
<para>
|
|
|
|
Diese Funktion kann aus dem Template wie folgt aufgerufen werden:
|
|
</para>
|
|
<programlisting>
|
|
|
|
{* diese Funktion wird nur zum Kompilier-Zeitpunkt ausgeführt *}
|
|
{tplheader}</programlisting>
|
|
<para>
|
|
|
|
Der resultierende PHP-Code würde ungefähr so aussehen:
|
|
</para>
|
|
<programlisting>
|
|
<php
|
|
echo 'index.tpl compiled at 2002-02-20 20:02';
|
|
?></programlisting>
|
|
</example>
|
|
</sect1>
|
|
|
|
<sect1 id="plugins.prefilters.postfilters">
|
|
<title>'pre'/'post'-Filter</title>
|
|
<para>
|
|
'pre'-Filter und 'post'-Filter folgen demselben Konzept. Der
|
|
einzige Unterschied ist der Zeitpunkt der Ausführung.
|
|
</para>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>string <function>smarty_prefilter_<replaceable>name</replaceable></function></funcdef>
|
|
<paramdef>string <parameter>$source</parameter></paramdef>
|
|
<paramdef>object <parameter>&$smarty</parameter></paramdef>
|
|
</funcprototype>
|
|
</funcsynopsis>
|
|
<para>
|
|
'pre'-Filter werden verwendet, um die Quellen eines Templates direkt
|
|
vor der Kompilierung zu verarbeiten. Als erster Parameter wird die
|
|
Template-Quelle, die möglicherweise bereits durch eine weiteren 'pre'-Filter
|
|
bearbeitet wurden, übergeben. Das Plugin muss den resultierenden Wert
|
|
zurückgeben. Achtung: Diese Werte werden nicht gespeichert und nur
|
|
zum Kompilier-Zeitpunkt verwendet.
|
|
</para>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>string <function>smarty_postfilter_<replaceable>name</replaceable></function></funcdef>
|
|
<paramdef>string <parameter>$compiled</parameter></paramdef>
|
|
<paramdef>object <parameter>&$smarty</parameter></paramdef>
|
|
</funcprototype>
|
|
</funcsynopsis>
|
|
<para>
|
|
'post'-Filter werden auf die kompilierte Ausgabe direkt vor dem Speichern
|
|
angewendet. Als erster Parameter wird der kompilierte Template-Code
|
|
übergeben, der möglicherweise zuvor von anderen 'post'-Filtern
|
|
bearbeitet wurde. Das Plugin muss den veränderten Template-Code zurückgeben.
|
|
</para>
|
|
<example>
|
|
<title>'pre'-Filter Plugin</title>
|
|
<programlisting>
|
|
<?php
|
|
/*
|
|
* Smarty plugin
|
|
* -------------------------------------------------------------
|
|
* File: prefilter.pre01.php
|
|
* Type: prefilter
|
|
* Name: pre01
|
|
* Purpose: Convert html tags to be lowercase.
|
|
* -------------------------------------------------------------
|
|
*/
|
|
function smarty_prefilter_pre01($source, &$smarty)
|
|
{
|
|
return preg_replace('!<(\w+)[^>]+>!e', 'strtolower("$1")', $source);
|
|
}
|
|
?></programlisting>
|
|
</example>
|
|
<para></para>
|
|
<example>
|
|
<title>'post'-Filter Plugin</title>
|
|
<programlisting>
|
|
<?php
|
|
/*
|
|
* Smarty plugin
|
|
* -------------------------------------------------------------
|
|
* File: postfilter.post01.php
|
|
* Type: postfilter
|
|
* Name: post01
|
|
* Purpose: Output code that lists all current template vars.
|
|
* -------------------------------------------------------------
|
|
*/
|
|
function smarty_postfilter_post01($compiled, &$smarty)
|
|
{
|
|
$compiled = "<pre>\n<?php print_r(\$this->get_template_vars()); ?>\n</pre>" . $compiled;
|
|
return $compiled;
|
|
}
|
|
?></programlisting>
|
|
</example>
|
|
</sect1>
|
|
|
|
<sect1 id="plugins.outputfilters"><title>Ausgabefilter</title>
|
|
<para>
|
|
Ausgabefilter werden auf das Template direkt vor der Ausgabe angewendet,
|
|
nachdem es geladen und ausgeführt wurde.
|
|
</para>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>string <function>smarty_outputfilter_<replaceable>name</replaceable></function></funcdef>
|
|
<paramdef>string <parameter>$template_output</parameter></paramdef>
|
|
<paramdef>object <parameter>&$smarty</parameter></paramdef>
|
|
</funcprototype>
|
|
</funcsynopsis>
|
|
<para>
|
|
Als erster Parameter wird die Template-Ausgabe übergeben, welche
|
|
verarbeitet werden soll und als zweiter Parameter das Smarty-Objekt.
|
|
Das Plugin muss danach die verarbeitete Template-Ausgabe zurückgeben.
|
|
</para>
|
|
<example>
|
|
<title>Ausgabefilter Plugin</title>
|
|
<programlisting>
|
|
/*
|
|
* Smarty plugin
|
|
* -------------------------------------------------------------
|
|
* File: outputfilter.protect_email.php
|
|
* Type: outputfilter
|
|
* Name: protect_email
|
|
* Purpose: Converts @ sign in email addresses to %40 as
|
|
* a simple protection against spambots
|
|
* -------------------------------------------------------------
|
|
*/
|
|
function smarty_outputfilter_protect_email($output, &$smarty)
|
|
{
|
|
return preg_replace('!(\S+)@([a-zA-Z0-9\.\-]+\.([a-zA-Z]{2,3}|[0-9]{1,3}))!',
|
|
'$1%40$2', $output);
|
|
}
|
|
</programlisting>
|
|
</example>
|
|
</sect1>
|
|
|
|
<sect1 id="plugins.resources"><title>Ressourcen</title>
|
|
<para>
|
|
Ressourcen-Plugins stellen einen generischen Weg dar, um Smarty mit
|
|
Template-Quellen oder PHP-Skripten zu versorgen. Einige Beispiele von Ressourcen:
|
|
Datenbanken, LDAP, shared Memory, Sockets, usw.
|
|
</para>
|
|
|
|
<para>
|
|
Für jeden Ressource-Typ müssen 4 Funktionen registriert werden. Jede dieser
|
|
Funktionen erhält die verlangte Ressource als ersten Parameter und das Smarty Objekt
|
|
als letzten. Die restlichen Parameter hängen von der Funktion ab.
|
|
</para>
|
|
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>bool <function>smarty_resource_<replaceable>name</replaceable>_source</function></funcdef>
|
|
<paramdef>string <parameter>$rsrc_name</parameter></paramdef>
|
|
<paramdef>string <parameter>&$source</parameter></paramdef>
|
|
<paramdef>object <parameter>&$smarty</parameter></paramdef>
|
|
</funcprototype>
|
|
<funcprototype>
|
|
<funcdef>bool <function>smarty_resource_<replaceable>name</replaceable>_timestamp</function></funcdef>
|
|
<paramdef>string <parameter>$rsrc_name</parameter></paramdef>
|
|
<paramdef>int <parameter>&$timestamp</parameter></paramdef>
|
|
<paramdef>object <parameter>&$smarty</parameter></paramdef>
|
|
</funcprototype>
|
|
<funcprototype>
|
|
<funcdef>bool <function>smarty_resource_<replaceable>name</replaceable>_secure</function></funcdef>
|
|
<paramdef>string <parameter>$rsrc_name</parameter></paramdef>
|
|
<paramdef>object <parameter>&$smarty</parameter></paramdef>
|
|
</funcprototype>
|
|
<funcprototype>
|
|
<funcdef>bool <function>smarty_resource_<replaceable>name</replaceable>_trusted</function></funcdef>
|
|
<paramdef>string <parameter>$rsrc_name</parameter></paramdef>
|
|
<paramdef>object <parameter>&$smarty</parameter></paramdef>
|
|
</funcprototype>
|
|
</funcsynopsis>
|
|
|
|
<para>
|
|
Die erste Funktion wird verwendet, um die Ressource zu laden. Der
|
|
zweite Parameter ist eine Variable, die via Referenz übergeben
|
|
wird und in der das Resultat gespeichert werden soll. Die Funktion
|
|
gibt <literal>true</literal> zurück, wenn der Ladevorgang erfolgreich war -
|
|
andernfalls <literal>false</literal>.
|
|
</para>
|
|
|
|
<para>
|
|
Die zweite Funktion fragt das letzte Änderungsdatum der angeforderten
|
|
Ressource (als Unix-Timestamp) ab. Der zweite Parameter ist die Variable,
|
|
welche via Referenz übergeben wird und in der das Resultat gespeichert werden soll.
|
|
Gibt <literal>true</literal> zurück, wenn das Änderungsdatum ermittelt
|
|
werden konnte und <literal>false</literal> wenn nicht.
|
|
</para>
|
|
|
|
<para>
|
|
Die dritte Funktion gibt <literal>true</literal> oder <literal>false</literal>
|
|
zurück, je nachdem ob die angeforderte Ressource als sicher bezeichnet wird
|
|
oder nicht. Diese Funktion wird nur für Template-Ressourcen verwendet,
|
|
sollte aber in jedem Fall definiert werden.
|
|
</para>
|
|
|
|
<para>
|
|
Die vierte Funktion gibt <literal>true</literal> oder <literal>false</literal>
|
|
zurück, je nachdem ob die angeforderte Ressource als vertrauenswürdig angesehen wird
|
|
oder nicht. Diese Funktion wird nur verwendet, wenn PHP-Skripte via <command>include_php</command>
|
|
oder <command>insert</command> eingebunden werden sollen und ein 'src' Attribut übergeben wurde.
|
|
Die Funktion sollte aber in jedem Fall definiert werden.
|
|
</para>
|
|
<para>
|
|
Sehen Sie dazu:
|
|
<link linkend="api.register.resource">register_resource()</link>,
|
|
<link linkend="api.unregister.resource">unregister_resource()</link>.
|
|
</para>
|
|
<example>
|
|
<title>Ressourcen Plugin</title>
|
|
<programlisting>
|
|
<?php
|
|
/*
|
|
* Smarty plugin
|
|
* -------------------------------------------------------------
|
|
* File: resource.db.php
|
|
* Type: resource
|
|
* Name: db
|
|
* Purpose: Fetches templates from a database
|
|
* -------------------------------------------------------------
|
|
*/
|
|
function smarty_resource_db_source($tpl_name, &$tpl_source, &$smarty)
|
|
{
|
|
// Datenbankabfragen machen, um '$tpl_source' das template 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 smarty_resource_db_timestamp($tpl_name, &$tpl_timestamp, &$smarty)
|
|
{
|
|
|
|
// Datenbankabfragen durchführen 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 smarty_resource_db_secure($tpl_name, &$smarty)
|
|
{
|
|
|
|
// angenommen alle Templates seien sicher...
|
|
return true;
|
|
}
|
|
|
|
function smarty_resource_db_trusted($tpl_name, &$smarty)
|
|
{
|
|
|
|
// wird für Templates nicht verwendet
|
|
}
|
|
?></programlisting>
|
|
</example>
|
|
</sect1>
|
|
|
|
<sect1 id="plugins.inserts"><title>Inserts</title>
|
|
<para>
|
|
Insert-Plugins werden verwendet, um Funktionen zu implementieren, die
|
|
via <link linkend="language.function.insert"><command>insert</command></link> aufgerufen werden.
|
|
</para>
|
|
<funcsynopsis>
|
|
<funcprototype>
|
|
<funcdef>string <function>smarty_insert_<replaceable>name</replaceable></function></funcdef>
|
|
<paramdef>array <parameter>$params</parameter></paramdef>
|
|
<paramdef>object <parameter>&$smarty</parameter></paramdef>
|
|
</funcprototype>
|
|
</funcsynopsis>
|
|
<para>
|
|
Als erster Parameter wird der Funktion ein assoziatives Array aller Attribute
|
|
übergeben, die im Insert-Tag notiert wurden. Sie können
|
|
auf diese Werte entweder direkt mit <varname>$params['start']</varname> zugreifen
|
|
oder sie mit <varname>extract($params)</varname> importieren.
|
|
</para>
|
|
<para>
|
|
Als Rückgabewert muss das Resultat der Ausführung geliefert werden,
|
|
das danach den Platz des <command>insert</command>-Tags im Template einnimmt.
|
|
</para>
|
|
<example>
|
|
<title>Insert-Plugin</title>
|
|
<programlisting>
|
|
<?php
|
|
/*
|
|
* Smarty plugin
|
|
* -------------------------------------------------------------
|
|
* File: insert.time.php
|
|
* Type: time
|
|
* Name: time
|
|
* Purpose: Inserts current date/time according to format
|
|
* -------------------------------------------------------------
|
|
*/
|
|
function smarty_insert_time($params, &$smarty)
|
|
{
|
|
if (empty($params['format'])) {
|
|
$smarty->trigger_error("insert time: missing 'format' parameter");
|
|
return;
|
|
}
|
|
|
|
$datetime = strftime($params['format']);
|
|
return $datetime;
|
|
}
|
|
?></programlisting>
|
|
</example>
|
|
</sect1>
|
|
</chapter>
|
|
</part>
|