all updated for 2.6.0 release, translated everything from 2_5_0 branch to 20030908

This commit is contained in:
andreas
2003-09-08 16:35:05 +00:00
parent 2f42bc6159
commit dcb5caf91e
4 changed files with 1111 additions and 858 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -72,11 +72,36 @@
<sect1 id="installing.smarty.basic"> <sect1 id="installing.smarty.basic">
<title>Basis Installation</title> <title>Basis Installation</title>
<note>
<title>Technische Bemerkung</title>
<para> <para>
Installieren Sie die Smarty Library Dateien aus dem /libs/ Verzeichnis Dieser Leitfaden geht davon aus, dass Sie Ihr Webserver- und PHP-Setup kennen
der Distribution. Diese PHP Dateien sollten NICHT angepasst werden. Sie und mit den Namenskonventionen f&uuml;r Dateien und Verzeichnisse Ihres Betriebssystems
werden zwischen den verschieden Applikationen die Smarty verwenden geteilt. vertraut sind. Im Folgenden wird ein Unix-Dateisystem verwendet, stellen Sie also
Diese Dateien werden bei einem upgrade ersetzt. sicher, dass sie die f&uuml;r Ihr Betriebssystem n&ouml;tigen &Auml;nderungen vornehmen.
</para>
<para>
Das Beispiel geht davon aus, dass '/php/includes' in Ihrem PHP-'include_path'
liegt. Konsultieren Sie das PHP-Manual f&uuml;r weiterf&uuml;hrende Informationen hierzu.
</para>
</note>
<para>
Installieren Sie als erstes die Smarty-Library Dateien. Diese Dateien
sollten von Ihnen NICHT editiert und von allen Applikationen
verwendet werden. Sie werden nur erneuert, wenn Sie eine neue Version von Smarty installieren.
</para>
<note>
<title>Technische Bemerkung</title>
<para>
Wir empfehlen keine &Auml;nderungen an den Smarty-Library Dateien vorzunehmen.
Dies macht ein m&ouml;gliches Upgrade wesentlich einfacher. Sie m&uuml;ssen
diese Dateien auch nicht anpassen, um Smarty zu konfigurieren! Benutzen Sie f<>r
diesen Zwecke eine Instanz der Smarty-Klasse.
</para>
</note>
<para>
Folgende Library Dateien werden mit Smarty geliefert und werden ben&ouml;tigt:
</para> </para>
<example> <example>
<title>Smarty-Library Dateiliste</title> <title>Smarty-Library Dateiliste</title>
@@ -85,93 +110,106 @@ Smarty.class.php
Smarty_Compiler.class.php Smarty_Compiler.class.php
Config_File.class.php Config_File.class.php
debug.tpl debug.tpl
/plugins/*.php (alle Dateien!)</screen> /core/*.php (alle)
/plugins/*.php (alle)</screen>
</screen>
</example> </example>
<para> <para>
Smarty verwendet eine PHP Konstante namens <link linkend="constant.smarty.dir">SMARTY_DIR</link> Sie k&ouml;nnen diese Dateien entweder in Ihrem PHP-'include_path' oder
die den Systempfad zu den Library Dateien enth&auml;lt. Wenn Ihre Applikation keine auch in irgend einem anderen Verzeichnis ablegen, solange die Konstante
Probleme hat die Library Dateien zu finden, m&uuml;ssen Sie diese Konstante nicht zuweisen, <link linkend="constant.smarty.dir">SMARTY_DIR</link> auf den korrekten
und Smarty wird alle ben&ouml;tigten Dateien finden. Falls <emphasis>Smarty.class.php</emphasis> Pfad zeigt. Im Folgenden werden Beispiele f&uuml;r beide F&auml;lle aufgezeigt.
nicht in Ihrem 'include_path' ist und Sie nicht den absoluten Pfad angeben, m&uuml;ssen Sie
SMARTY_DIR manuell zuweisen. SMARTY_DIR <emphasis>must</emphasis> muss mit einem '/'-Zeichen (slash) enden.
</para> </para>
<para> <para>
So erzeugt man eine Instanz der Smarty-Klasse im PHP-Skript: So erzeugt man eine Instanz der Smarty-Klasse im PHP-Skript:
</para> </para>
<example> <example>
<title>Smarty Instanz aus 'include_path' erstellen:</title> <title>Smarty Instanz erstellen:</title>
<screen> <screen>
require('Smarty.class.php'); require('Smarty.class.php');
$smarty = new Smarty;</screen> $smarty = new Smarty;</screen>
</example> </example>
<para> <para>
Versuchen Sie das oben gezeigte Script auszuf&uuml;hren. Wenn Sie einen Fehler erhalten ('<emphasis>Smarty.class.php</emphasis> file could not be found'), Versuchen Sie das Skript auszuf&uuml;hren. Wenn Sie eine Fehlermeldung erhalten dass
m&uuml;ssen Sie wie folgt vorgehen: <emphasis>Smarty.class.php</emphasis> nicht gefunden werden konnte, versuchen Sie folgendes:
</para> </para>
<example> <example>
<title>&Uuml;bergeben Sie den vollen Pfad</title> <title>Absoluter Pfad &uuml;bergeben</title>
<screen> <screen>
require('/usr/local/lib/php/Smarty/Smarty.class.php'); require('/usr/local/lib/php/Smarty/Smarty.class.php');
$smarty = new Smarty;</screen> $smarty = new Smarty;</screen>
</example> </example>
<example> <example>
<title>F&uuml;gen Sie den Library Pfad Ihrem PHP-'include_path' hinzu</title> <title>Library Verzeichnis dem Include-Pfad hinzuf&uuml;gen</title>
<screen> <screen>
// Editieren Sie die php.ini Datei und f&uuml;gen Sie den Library Pfad Ihrem PHP-'include_path' hinzu // editieren Sie php.ini, f&uuml;gen Sie das Smarty
// Danach sollte folgendes funktionieren. // Verzeichnis Ihrem include_path hinzu, und starten Sie den Webserver neu
require('Smarty.class.php'); // Danach sollte folgendes Funktionieren.
$smarty = new Smarty;</screen> require('Smarty.class.php');
</example> $smarty = new Smarty;</screen>
</example>
<example> <example>
<title>Setzen Sie SMARTY_DIR manuell</title> <title>SMARTY_DIR manuell setzen</title>
<screen> <screen>
define('SMARTY_DIR','/usr/local/lib/php/Smarty/'); define('SMARTY_DIR','/usr/local/lib/php/Smarty/');
require(SMARTY_DIR.'Smarty.class.php'); require(SMARTY_DIR.'Smarty.class.php');
$smarty = new Smarty;</screen> $smarty = new Smarty;</screen>
</example> </example>
<para> <para>
Jetzt, wo die Library Dateien an ihrem Platz sind, wird es Jetzt, wo die Library Dateien an ihrem Platz sind, wird es
Zeit, die Smarty Verzeichnisse zu erstellen. Smarty ben&ouml;tigt 4 Verzeichnisse Zeit, die Smarty Verzeichnisse zu erstellen.
welche (normerweise) <emphasis>templates</emphasis>, <emphasis>templates_c</emphasis>, <emphasis>configs</emphasis>
und <emphasis>cache</emphasis> heissen. Jedes kann jedoch &uuml;ber die
Smarty Attribute <emphasis>$template_dir</emphasis>, <emphasis>$compile_dir</emphasis>, <emphasis>$config_dir</emphasis>,
und <emphasis>$cache_dir</emphasis> definiert werden. Es wird empfohlen f&uuml;r jede Applikation die Smarty verwenden
soll eigene Verzeichnisse einzurichten.
</para> </para>
<para> <para>
Stellen Sie sicher dass Sie die DocumentRoot Ihres Webservers kennen. F&uuml;r unser Beispiel werden wir die Smarty Umgebung f&uuml;r eine
In unserem Beispiel verwenden wir "/web/www.mydomain.com/docs/". Alle G&auml;stebuch-Applikation konfigurieren. Wir verwenden den Applikationsnamen
Smarty-Verzeichnisse werden immer nur von Smarty aufgerufen, nie vom Browser nur, um die Verzeichnis-Struktur zu verdeutlichen. Sie k&ouml;nnen die selbe
direkt. Deshalb wird empfohlen diese Verzeichnisse <emphasis>ausserhalb</emphasis> Umgebung f&uuml;r alle Ihre Applikationen verwenden indem Sie 'guestbook'
der DocumentRoot einzurichten. durch dem Namen Ihrer Applikation ersetzen.
</para> </para>
<para> <para>
F&uuml;r unser installations-Beispiel werden wir die Umgebung f&uuml;r eine Stellen Sie sicher, dass Sie die DocumentRoot Ihres Webservers kennen.
G&auml;stebuchapplikation einrichten. Wir verwenden dies nur als Beispiel, In unserem Beispiel lautet sie '/web/www.domain.com/docs/'.
falls Sie ihre eigene Applikationsumgebung einrichten, ersetzen sie '/guestbook/'
einfach durch den Namen Ihrer eigener Applikation. Unsere Dateien werden unter
"/web/www.mydomain.com/smarty/guestbook/" abgelegt.
</para> </para>
<para>
Die Smarty Verzeichnisse werden in den Klassen-Variablen $template_dir,
$compile_dir, $config_dir und $cache_dir definiert. Die Standardwerte sind:
"templates", "templates_c", "configs" und "cache". F&uuml;r unser Beispiel
legen wir alle diese Verzeichnisse unter '/web/www.domain.com/smarty/guestbook/' an.
</para>
<note>
<title>Technische Bemerkung</title>
<para>
Wir empfehlen, diese Verzeichnisse ausserhalb der DocumentRoot anzulegen,
um m&ouml;gliche Direktzugriffe zu verhindern.
</para>
</note>
<para> <para>
In Ihrer DocumentRoot muss mindestens eine Datei liegen, die f&uuml;r Browser In Ihrer DocumentRoot muss mindestens eine Datei liegen, die f&uuml;r Browser
zug&auml;nglich ist. Wir nennen dieses Skript 'index.php', und legen zug&auml;nglich ist. Wir nennen dieses Skript 'index.php', und legen
es in das Verzeichnis '/guestbook/' in unserer DocumentRoot. es in das Verzeichnis '/guestbook/' in unserer DocumentRoot.
</para>
<note>
<title>Technische Bemerkung</title>
<para>
Bequem ist es, den Webserver so zu konfigurieren, dass 'index.php' als Bequem ist es, den Webserver so zu konfigurieren, dass 'index.php' als
Standard-Verzeichnis-Index verwendet wird. Somit kann man das Skript Standard-Verzeichnis-Index verwendet wird. Somit kann man das Skript
direkt mit 'http://www.domain.com/guestbook/' aufrufen. Falls Sie Apache direkt mit 'http://www.domain.com/guestbook/' aufrufen. Falls Sie Apache
verwenden, l&auml;sst sich dies konfigurieren indem Sie 'index.php' verwenden, l&auml;sst sich dies konfigurieren indem Sie 'index.php'
als letzten Eintrag f&uuml;r DirectoryIndex verwenden. (Jeder Eintrag muss als letzten Eintrag f&uuml;r DirectoryIndex verwenden. (Jeder Eintrag muss
mit einem Leerzeichen abgetrennt werden). mit einem Leerzeichen abgetrennt werden).
</para> </para>
</note>
<para> <para>
Die Dateistruktur bis jetzt: Die Dateistruktur bis jetzt:
@@ -185,6 +223,7 @@ $smarty = new Smarty;</screen>
/usr/local/lib/php/Smarty/Config_File.class.php /usr/local/lib/php/Smarty/Config_File.class.php
/usr/local/lib/php/Smarty/debug.tpl /usr/local/lib/php/Smarty/debug.tpl
/usr/local/lib/php/Smarty/plugins/*.php /usr/local/lib/php/Smarty/plugins/*.php
/usr/local/lib/php/Smarty/core/*.php
/web/www.mydomain.com/smarty/guestbook/templates/ /web/www.mydomain.com/smarty/guestbook/templates/
/web/www.mydomain.com/smarty/guestbook/templates_c/ /web/www.mydomain.com/smarty/guestbook/templates_c/
@@ -194,11 +233,21 @@ $smarty = new Smarty;</screen>
/web/www.mydomain.com/docs/guestbook/index.php</screen> /web/www.mydomain.com/docs/guestbook/index.php</screen>
</example> </example>
<note>
<title>Technische Bemerkung</title>
<para>
Falls Sie kein Caching und keine Konfigurationsdateien verwenden, ist es nicht
erforderlich die Verzeichnisse '$config_dir' und '$cache_dir' zu erstellen.
Es wird jedoch trotzdem empfohlen, da diese Funktionalit&auml;ten eventuell sp&auml;ter
genutzt werden sollen.
</para>
</note>
<para> <para>
Smarty ben&ouml;tigt Schreibzugriff auf die Verzeichnisse '$compile_dir' und '$cache_dir'. Smarty ben&ouml;tigt Schreibzugriff auf die Verzeichnisse '$compile_dir' und '$cache_dir'.
Stellen Sie also sicher, dass der Webserver-Benutzer (normalerweise Benutzer 'nobody' und Gruppe 'nogroup') Stellen Sie also sicher, dass der Webserver-Benutzer (normalerweise Benutzer 'nobody' und Gruppe 'nogroup')
in diese Verzeichnisse schreiben kann. (In OS X lautet der Benutzer normalerweise 'web' und in diese Verzeichnisse schreiben kann. (In OS X lautet der Benutzer normalerweise 'www' und
ist in der Gruppe 'web'). Wenn Sie Apache verwenden, k&ouml;nnen Sie in der httpd.conf (gew<65>hnlich in '/usr/local/apache/conf/') ist in der Gruppe 'www'). Wenn Sie Apache verwenden, k&ouml;nnen Sie in der httpd.conf (gew<65>hnlich in '/usr/local/apache/conf/')
nachsehen, unter welchem Benutzer Ihr Server l&auml;uft. nachsehen, unter welchem Benutzer Ihr Server l&auml;uft.
</para> </para>
@@ -206,11 +255,11 @@ $smarty = new Smarty;</screen>
<title>Dateirechte einrichten</title> <title>Dateirechte einrichten</title>
<screen> <screen>
chown nobody:nobody /web/www.mydomain.com/smarty/templates_c/ chown nobody:nobody /web/www.mydomain.com/smarty/guestbook/templates_c/
chmod 770 /web/www.mydomain.com/smarty/templates_c/ chmod 770 /web/www.mydomain.com/smarty/guestbook/templates_c/
chown nobody:nobody /web/www.mydomain.com/smarty/cache/ chown nobody:nobody /web/www.mydomain.com/smarty/guestbook/cache/
chmod 770 /web/www.mydomain.com/smarty/cache/</screen> chmod 770 /web/www.mydomain.com/smarty/guestbook/cache/</screen>
</example> </example>
<note> <note>
@@ -229,7 +278,7 @@ chmod 770 /web/www.mydomain.com/smarty/cache/</screen>
</para> </para>
<example> <example>
<title>Editieren von /web/www.mydomain.com/smarty/templates/index.tpl</title> <title>Editieren von /web/www.mydomain.com/smarty/guestbook/templates/index.tpl</title>
<screen> <screen>
{* Smarty *} {* Smarty *}
@@ -252,17 +301,14 @@ Hallo, {$name}!</screen>
<para> <para>
Als n&auml;chstes editieren wir die Datei 'index.php'. Wir erzeugen eine Als n&auml;chstes editieren wir die Datei 'index.php'. Wir erzeugen eine
Smarty-Instanz, weisen dem Template eine Variable zu und geben 'index.tpl' aus. Smarty-Instanz, weisen dem Template eine Variable zu und geben 'index.tpl' aus.
In unserem Beispiel ist '/usr/local/lib/php/Smarty' in unserem PHP-'include_path',
stellen Sie sicher dass dies bei Ihrer Installation auch der Fall ist, oder
verwenden Sie ansonsten aboslute Pfade.
</para> </para>
<example> <example>
<title>Editieren von /web/www.mydomain.com/docs/guestbook/index.php</title> <title>Editieren von /web/www.mydomain.com/docs/guestbook/index.php</title>
<screen> <screen>
// Smarty laden define('SMARTY_DIR','/usr/local/lib/php/Smarty/');
require('Smarty.class.php'); require(SMARTY_DIR.'Smarty.class.php');
$smarty = new Smarty; $smarty = new Smarty;
@@ -306,8 +352,7 @@ $smarty->display('index.tpl');</screen>
eine eigene Smarty-Umgebung zu initialisieren. Anstatt immer wieder eine eigene Smarty-Umgebung zu initialisieren. Anstatt immer wieder
die Verzeichnisse zu definieren, kann diese Aufgabe auch in einer einzigen die Verzeichnisse zu definieren, kann diese Aufgabe auch in einer einzigen
Datei erledigt werden. Beginnen wir, indem wir ein neues Verzeichnis namens '/php/includes/guestbook/' Datei erledigt werden. Beginnen wir, indem wir ein neues Verzeichnis namens '/php/includes/guestbook/'
erstellen und eine Datei namens 'setup.php' darin anlegen. In unserem Beispiel ist '/php/includes' erstellen und eine Datei namens 'setup.php' darin anlegen.
im PHP-'include_path'. Stellen Sie sicher dass das auch bei Ihnen der Fall ist, oder benutzen Sie absolute Pfadnamen.
</para> </para>
<example> <example>
@@ -315,9 +360,10 @@ $smarty->display('index.tpl');</screen>
<screen> <screen>
// Smarty Library Dateien laden // Smarty Library Dateien laden
define('SMARTY_DIR','/usr/local/lib/php/Smarty/');
require(SMARTY_DIR.'Smarty.class.php'); require(SMARTY_DIR.'Smarty.class.php');
// steup.php ist auch ein guter Platz um Applikations spezifische Libraries zu laden // ein guter Platz um Applikations spezifische Libraries zu laden
// require('guestbook/guestbook.lib.php'); // require('guestbook/guestbook.lib.php');
class Smarty_GuestBook extends Smarty { class Smarty_GuestBook extends Smarty {
@@ -341,6 +387,18 @@ class Smarty_GuestBook extends Smarty {
}</screen> }</screen>
</example> </example>
<note>
<title>Technische Bemerkung</title>
<para>
In unserem Beispiel werden die Library Dateien ausserhalb der DocumentRoot
abgelegt. Diese Dateien k&ouml;nnten sensitive Informationen enthalten,
die wir nicht zug&auml;nglich machen m&ouml;chten.
Deshalb legen wir alle Library Dateien in '/php/includes/guestbook/' ab
und laden sie in unserem 'setup.php' Skript, wie Sie im oben gezeigten
Beispiel sehen k&ouml;nnen.
</para>
</note>
<para> <para>
Nun passen wir 'index.php' an, um 'setup.php' zu verwenden: Nun passen wir 'index.php' an, um 'setup.php' zu verwenden:
</para> </para>

View File

@@ -30,7 +30,7 @@
</author> </author>
</authorgroup> </authorgroup>
<edition>Version 2.5</edition> <edition>Version 2.0</edition>
<copyright> <copyright>
<year>2001</year> <year>2001</year>
<year>2002</year> <year>2002</year>

View File

@@ -390,6 +390,20 @@
Normalerweise '}'. Normalerweise '}'.
</para> </para>
</sect1> </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"> <sect1 id="variable.compiler.class">
<title>$compiler_class</title> <title>$compiler_class</title>
<para> <para>
@@ -405,6 +419,16 @@
Verh&auml;lt sich wie 'variables_order' in der php.ini. Verh&auml;lt sich wie 'variables_order' in der php.ini.
</para> </para>
</sect1> </sect1>
<sect1 id="variable.request.use.auto.globals">
<title>$request_use_auto_globals</title>
<para>
Definiert ob Smarty php's $HTTP_*_VARS[] ($request_use_auto_globals=false welches
der Standardwert ist) oder $_*[] ($request_use_auto_globals=true) verwenden soll.
Dies betrifft Templates die {$smarty.request.*}, {$smarty.get.*}, etc... verwenden.
Achtung: wenn $request_use_auto_globals auf TRUE gesetzt ist, hat <link linkend="variable.request.vars.order">variable.request.vars.order </link>
keine Auswirkungen, da php's Konfigurationswert <literal>gpc_order</literal> verwendet wird.
</para>
</sect1>
<sect1 id="variable.compile.id"> <sect1 id="variable.compile.id">
<title>$compile_id</title> <title>$compile_id</title>
<para> <para>
@@ -428,10 +452,20 @@
Definiert ein Array von Variablen-Modifikatoren, die auf jeder Variable anzuwenden sind. Definiert ein Array von Variablen-Modifikatoren, die auf jeder Variable anzuwenden sind.
Wenn Sie zum Beispiel alle Variablen standardm&auml;ssig HTML-Maskieren wollen, Wenn Sie zum Beispiel alle Variablen standardm&auml;ssig HTML-Maskieren wollen,
k&ouml;nnen Sie array('escape:"htmlall"'); verwenden. Um eine Variable von dieser k&ouml;nnen Sie array('escape:"htmlall"'); verwenden. Um eine Variable von dieser
Behandlung auszuschliessen, k&ouml;nnen Sie ihr den Modifikator 'nodefaults' &uuml;bergeben. Behandlung auszuschliessen, k&ouml;nnen Sie ihr den Parameter 'smarty' mit dem Modifikator 'nodefaults'
&uuml;bergeben. Als Beispiel: {$var|smarty:nodefaults}.
Zum Beispiel: {$var|nodefaults}. Zum Beispiel: {$var|nodefaults}.
</para> </para>
</sect1> </sect1>
<sect1 id="variable.default.resource.type">
<title>$default_resource_type</title>
<para>
Definiert den Ressourcentyp der von Smarty implizitverwendet werden soll. Standartwert
ist 'file', was dazu f&uuml;hrt dass $smarty->display('index.tpl'); und
$smarty->display('file:index.tpl'); identisch sind. Konsultieren Sie das
<link linkend="template.resources">Resource</link> Kapitel f&uuml;r weitere Informationen.
</para>
</sect1>
</chapter> </chapter>
<chapter id="api.functions"> <chapter id="api.functions">
<title>Methoden</title> <title>Methoden</title>
@@ -447,27 +481,12 @@
<paramdef>string <parameter>varname</parameter></paramdef> <paramdef>string <parameter>varname</parameter></paramdef>
<paramdef>mixed <parameter>var</parameter></paramdef> <paramdef>mixed <parameter>var</parameter></paramdef>
</funcprototype> </funcprototype>
<funcprototype>
<funcdef>void <function>append</function></funcdef>
<paramdef>string <parameter>varname</parameter></paramdef>
<paramdef>mixed <parameter>var</parameter></paramdef>
<paramdef>boolean <parameter>merge</parameter></paramdef>
</funcprototype>
</funcsynopsis> </funcsynopsis>
<para> <para>
Wird verwendet, um an Template-Variablen weitere Daten anzuh&auml;ngen. Sie Wird verwendet, um an Template-Variablen weitere Daten anzuh&auml;ngen. Sie
k&ouml;nnen entweder ein Namen/Wert-Paar oder assoziative Arrays, k&ouml;nnen entweder ein Namen/Wert-Paar oder assoziative Arrays,
die mehrere Namen/Wert-Paare enthalten, &uuml;bergeben. Wenn Sie als dritten Parameter die mehrere Namen/Wert-Paare enthalten, &uuml;bergeben.
'true' &uuml;bergeben werden die beiden Arrays zusammengef&uuml;gt.
</para> </para>
<note>
<title>Technical Note</title>
<para>
Der Parameter 'merge' &uuml;berschreibt bestehende Schl&uuml;ssel, falls
im zweiten Array die selben Schl&uuml;ssel wie im ersten vorkommen.
Diese Funktion ist ungelich 'array_merge()' aus PHP.
</para>
</note>
<example> <example>
<title>append (anh&auml;ngen)</title> <title>append (anh&auml;ngen)</title>
<programlisting> <programlisting>
@@ -488,27 +507,20 @@
<paramdef>string <parameter>varname</parameter></paramdef> <paramdef>string <parameter>varname</parameter></paramdef>
<paramdef>mixed <parameter>var</parameter></paramdef> <paramdef>mixed <parameter>var</parameter></paramdef>
</funcprototype> </funcprototype>
<funcprototype>
<funcdef>void <function>append_by_ref</function></funcdef>
<paramdef>string <parameter>varname</parameter></paramdef>
<paramdef>mixed <parameter>var</parameter></paramdef>
<paramdef>boolean <parameter>merge</parameter></paramdef>
</funcprototype>
</funcsynopsis> </funcsynopsis>
<para> <para>
Wird verwendet, um an Template-Variablen Werte via Referenz (pass by reference) anstatt via Kopie Wird verwendet, um an Template-Variablen Werte via Referenz (pass by reference) anstatt via Kopie
anzuh&auml;ngen. Wenn Sie eine Variable via Referenz anh&auml;ngen und sie nachtr&auml;glich anzuh&auml;ngen. Konsultieren Sie das PHP-Manual zum Thema 'variable referencing'
ge&auml;ndert wird, wird auch der angeh&auml;ngte Wert ge&auml;ndert. Bei Objekten kann so f&uuml;r weitere Erkl&auml;rungen.
das kopieren derselben vermieden werden. Konsultieren Sie das PHP-Manual betreffend Variablenreferenzierung
f&uuml;r weitere Erkl&auml;rungen. Wenn Sie als dritten Parameter 'true' &uuml;bergeben wird das anzuh&auml;ngende Array
mit dem bestehenden zusammengef&uml;gt.
</para> </para>
<note> <note>
<title>Technische Bemerkung</title> <title>Technische Bemerkung</title>
<para> <para>
Der Parameter 'merge' &uuml;berschreibt bestehende Schl&uuml;ssel, falls 'append_by_ref()' ist effizienter als 'append()', da keine Kopie der Variable
im zweiten Array die selben Schl&uuml;ssel wie im ersten vorkommen. erzeugt, sondern auf die Variable im Speicher referenziert wird. Beachten Sie
Diese Funktion ist ungelich 'array_merge()' aus PHP. dabei, dass eine nachtr&auml;gliche &auml;nderung Original-Variable auch die zugewiesene Variable
&auml;ndert. PHP5 wird die Referenzierung automatisch &uuml;bernehmen, diese
Funktion dient als Workaround.
</para> </para>
</note> </note>
<example> <example>
@@ -567,11 +579,11 @@
<note> <note>
<title>Technical Note</title> <title>Technical Note</title>
<para> <para>
Wird verwendet, um an Template-Variablen Werte via Referenz (pass by reference) anstatt via Kopie 'assign_by_ref()' ist effizienter als 'assign()', da keine Kopie der Variable
anzuh&auml;ngen. Wenn Sie eine Variable via Referenz anh&auml;ngen und sie nachtr&auml;glich erzeugt wird, sondern auf die Variable im Speicher referenziert wird. Beachten Sie
ge&auml;ndert wird, wird auch der angeh&auml;ngte Wert ge&auml;ndert. Bei Objekten kann so dabei, dass eine nachtr&auml;gliche &auml;nderung Original-Variable auch die zugewiesene Variable
das kopieren derselben vermieden werden. Konsultieren Sie das PHP-Manual betreffend Variablenreferenzierung &auml;ndert. PHP5 wird die Referenzierung automatisch &uuml;bernehmen, diese
f&uuml;r weitere Erkl&auml;rungen. Funktion dient als Workaround.
</para> </para>
</note> </note>
<example> <example>
@@ -853,80 +865,27 @@
echo $output;</programlisting> echo $output;</programlisting>
</example> </example>
</sect1> </sect1>
<sect1 id="api.get.config.vars">
<title>get_config_vars</title>
<funcsynopsis>
<funcprototype>
<funcdef>array <function>get_config_vars</function></funcdef>
<paramdef>string <parameter><optional>varname</optional></parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
Gibt die definierte Variable aus einer Konfigurationsdatei zur&uuml;ck,
wenn kein Parameter &uuml;bergeben wird, wird ein Array aller Variablen
zur&uuml;ckgegeben.
</para>
<example>
<title>get_config_vars</title>
<programlisting>
// Vriable 'foo' aus Konfigurationsdatei lesen
$foo = $smarty->get_config_vars('foo');
// alle Variablen aus der Konfigurationsdatei lesen
$config_vars = $smarty->get_config_vars();
// ausgeben
print_r($config_vars);</programlisting>
</example>
</sect1>
<sect1 id="api.get.registered.object">
<title>get_registered_object</title>
<funcsynopsis>
<funcprototype>
<funcdef>array <function>get_registered_object</function></funcdef>
<paramdef>string <parameter>object_name</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
This returns a reference to a registered object. This is useful
from within a custom function when you need direct access to a
registered object.
</para>
<example>
<title>get_registered_object</title>
<programlisting>
function smarty_block_foo($params, &amp;$smarty) {
if (isset[$params['object']]) {
// get reference to registered object
$obj_ref =&amp; $smarty->&amp;get_registered_object($params['object']);
// use $obj_ref is now a reference to the object
}
}</programlisting>
</example>
</sect1>
<sect1 id="api.get.template.vars"> <sect1 id="api.get.template.vars">
<title>get_template_vars (Template-Variablen extrahieren)</title> <title>get_template_vars (Template-Variablen extrahieren)</title>
<funcsynopsis> <funcsynopsis>
<funcprototype> <funcprototype>
<funcdef>array <function>get_template_vars</function></funcdef> <funcdef>array <function>get_template_vars</function></funcdef>
<paramdef>string <parameter><optional>varname</optional></parameter></paramdef> <paramdef><parameter></parameter></paramdef>
</funcprototype> </funcprototype>
</funcsynopsis> </funcsynopsis>
<para> <para>
Gibt den Wert der &uuml;bergebenen Template-Variable zur&uuml;ck. Wenn kein Parameter Gibt ein Array der zugewiesenen Template-Variablen zur&uuml;ck.
&uuml;bergeben wird, besteht die R&uuml;ckgabe aus einem Array aller zugewiesener Variablen.
</para> </para>
<example> <example>
<title>get_template_vars (Template-Variablen extrahieren)</title> <title>get_template_vars (Template-Variablen extrahieren)</title>
<programlisting> <programlisting>
// Template-Variable 'foo' extrahieren
$foo = $smarty->get_template_vars('foo');
// alle zugewiesenen Template-Variablen extrahieren
$tpl_vars = $smarty->get_template_vars();
// Anschauen // alle zugewiesenen Template-Variablen extrahieren
print_r($tpl_vars);</programlisting> $tpl_vars = $smarty->get_template_vars();
// Anschauen
var_dump($tpl_vars);</programlisting>
</example> </example>
</sect1> </sect1>
<sect1 id="api.is.cached"> <sect1 id="api.is.cached">
@@ -1000,13 +959,24 @@
<funcprototype> <funcprototype>
<funcdef>void <function>register_block</function></funcdef> <funcdef>void <function>register_block</function></funcdef>
<paramdef>string <parameter>name</parameter></paramdef> <paramdef>string <parameter>name</parameter></paramdef>
<paramdef>string <parameter>impl</parameter></paramdef> <paramdef>mixed <parameter>impl</parameter></paramdef>
<paramdef>bool <parameter>cacheable</parameter></paramdef>
<paramdef>array or null <parameter>cache_attrs</parameter></paramdef>
</funcprototype> </funcprototype>
</funcsynopsis> </funcsynopsis>
<para> <para>
Wird verwendet, um Block-Funktion-Plugins dynamisch zu registrieren. Wird verwendet, um Block-Funktion-Plugins dynamisch zu registrieren.
&Uuml;bergeben Sie dazu den Namen der Block-Funktion und den Namen der &Uuml;bergeben Sie dazu den Namen der Block-Funktion und den Namen der
PHP-Funktion, die die entsprechende Funktionalit&auml;t bereitstellt. PHP-Callback-Funktion, die die entsprechende Funktionalit&auml;t bereitstellt.
</para>
<para>
Der Parameter <parameter>impl</parameter> kann als (a) einen Funktionnamen oder (b) einem Array der Form <literal>array(&$object, $method)</literal>,
wobei <literal>&$object</literal> eine Referenz zu einem Objekt und <literal>$method</literal> der Name der Methode die aufgerufen werden soll ist,
oder als Array der Form <literal>array(&$class, $method)</literal>, wobei <literal>$class</literal> der Name der Klasse und <literal>$method</literal>
der Name der Methode ist die aufgerufen werden soll, &uuml;bergeben werden.
</para>
<para>
<parameter>$cacheable</parameter> und <parameter>$cache_attrs</parameter> k&ouml;nnen in den meisten F&auml;llen weggelassen werden. Konsultieren Sie <link linkend="caching.cacheable">Die Ausgabe von cachebaren Plugins Kontrollieren</link> f&uuml;r weitere Informationen.
</para> </para>
<example> <example>
<title>register_block (Block-Funktion registrieren)</title> <title>register_block (Block-Funktion registrieren)</title>
@@ -1014,12 +984,12 @@
/* PHP */ /* PHP */
$smarty->register_block("translate", "do_translation"); $smarty->register_block("translate", "do_translation");
function do_translation ($params, $content, &$smarty) { function do_translation ($params, $content, &$smarty, &amp;$repeat) {
if ($content) { if (isset($content)) {
$lang = $params['lang']; $lang = $params['lang'];
// &uuml;bersetze den Inhalt von '$content' // &uuml;bersetze den Inhalt von '$content'
echo $translation; return $translation;
} }
} }
@@ -1035,7 +1005,8 @@
<funcprototype> <funcprototype>
<funcdef>void <function>register_compiler_function</function></funcdef> <funcdef>void <function>register_compiler_function</function></funcdef>
<paramdef>string <parameter>name</parameter></paramdef> <paramdef>string <parameter>name</parameter></paramdef>
<paramdef>string <parameter>impl</parameter></paramdef> <paramdef>mixed <parameter>impl</parameter></paramdef>
<paramdef>bool <parameter>cacheable</parameter></paramdef>
</funcprototype> </funcprototype>
</funcsynopsis> </funcsynopsis>
<para> <para>
@@ -1043,6 +1014,15 @@
registrieren. &Uuml;bergeben Sie dazu den Namen der Compiler-Funktion und den Namen der registrieren. &Uuml;bergeben Sie dazu den Namen der Compiler-Funktion und den Namen der
PHP-Funktion, die die entsprechende Funktionalit&auml;t bereitstellt. PHP-Funktion, die die entsprechende Funktionalit&auml;t bereitstellt.
</para> </para>
<para>
Der Parameter <parameter>impl</parameter> kann als (a) einen Funktionnamen oder (b) einem Array der Form <literal>array(&$object, $method)</literal>,
wobei <literal>&$object</literal> eine Referenz zu einem Objekt und <literal>$method</literal> der Name der Methode die aufgerufen werden soll ist,
oder als Array der Form <literal>array(&$class, $method)</literal>, wobei <literal>$class</literal> der Name der Klasse und <literal>$method</literal>
der Name der Methode ist die aufgerufen werden soll, &uuml;bergeben werden.
</para>
<para>
<parameter>$cacheable</parameter> und <parameter>$cache_attrs</parameter> k&ouml;nnen in den meisten F&auml;llen weggelassen werden. Konsultieren Sie <link linkend="caching.cacheable">Die Ausgabe von cachebaren Plugins Kontrollieren</link> f&uuml;r weitere Informationen.
</para>
</sect1> </sect1>
<sect1 id="api.register.function"> <sect1 id="api.register.function">
<title>register_function (Funktion registrieren)</title> <title>register_function (Funktion registrieren)</title>
@@ -1050,14 +1030,24 @@
<funcprototype> <funcprototype>
<funcdef>void <function>register_function</function></funcdef> <funcdef>void <function>register_function</function></funcdef>
<paramdef>string <parameter>name</parameter></paramdef> <paramdef>string <parameter>name</parameter></paramdef>
<paramdef>string <parameter>impl</parameter></paramdef> <paramdef>mixed <parameter>impl</parameter></paramdef>
<paramdef>bool <parameter>cacheable</parameter></paramdef>
<paramdef>array or null <parameter>cache_attrs</parameter></paramdef>
</funcprototype> </funcprototype>
</funcsynopsis> </funcsynopsis>
<para> <para>
Wird verwendet, um Template-Funktion-Plugins dynamisch zu Wird verwendet, um Template-Funktion-Plugins dynamisch zu
registrieren. &Uuml;bergeben Sie dazu den Namen der Template-Funktion registrieren. &Uuml;bergeben Sie dazu den Namen der Template-Funktion
und den Namen der PHP-Funktion, die die entsprechende Funktionalit&auml;t bereitstellt. und den Namen der PHP-Funktion, die die entsprechende Funktionalit&auml;t bereitstellt.
</para>
<para>
Der Parameter <parameter>impl</parameter> kann als (a) einen Funktionnamen oder (b) einem Array der Form <literal>array(&$object, $method)</literal>,
wobei <literal>&$object</literal> eine Referenz zu einem Objekt und <literal>$method</literal> der Name der Methode die aufgerufen werden soll ist,
oder als Array der Form <literal>array(&$class, $method)</literal>, wobei <literal>$class</literal> der Name der Klasse und <literal>$method</literal>
der Name der Methode ist die aufgerufen werden soll, &uuml;bergeben werden.
</para>
<para>
<parameter>$cacheable</parameter> und <parameter>$cache_attrs</parameter> k&ouml;nnen in den meisten F&auml;llen weggelassen werden. Konsultieren Sie <link linkend="caching.cacheable">Die Ausgabe von cachebaren Plugins Kontrollieren</link> f&uuml;r weitere Informationen.
</para> </para>
<example> <example>
<title>register_function (Funktion registrieren)</title> <title>register_function (Funktion registrieren)</title>
@@ -1068,7 +1058,7 @@
extract($params); extract($params);
if(empty($format)) if(empty($format))
$format="%b %e, %Y"; $format="%b %e, %Y";
echo strftime($format,time()); return strftime($format,time());
} }
// Von nun an k&ouml;nnen Sie {date_now} verwenden, um das aktuelle Datum auszugeben. // Von nun an k&ouml;nnen Sie {date_now} verwenden, um das aktuelle Datum auszugeben.
@@ -1081,7 +1071,7 @@
<funcprototype> <funcprototype>
<funcdef>void <function>register_modifier</function></funcdef> <funcdef>void <function>register_modifier</function></funcdef>
<paramdef>string <parameter>name</parameter></paramdef> <paramdef>string <parameter>name</parameter></paramdef>
<paramdef>string <parameter>impl</parameter></paramdef> <paramdef>mixed <parameter>impl</parameter></paramdef>
</funcprototype> </funcprototype>
</funcsynopsis> </funcsynopsis>
<para> <para>
@@ -1090,6 +1080,12 @@
und den Namen der PHP-Funktion, die die entsprechende Funktionalit&auml;t und den Namen der PHP-Funktion, die die entsprechende Funktionalit&auml;t
bereitstellt. bereitstellt.
</para> </para>
<para>
Der Parameter <parameter>impl</parameter> kann als (a) einen Funktionnamen oder (b) einem Array der Form <literal>array(&$object, $method)</literal>,
wobei <literal>&$object</literal> eine Referenz zu einem Objekt und <literal>$method</literal> der Name der Methode die aufgerufen werden soll ist,
oder als Array der Form <literal>array(&$class, $method)</literal>, wobei <literal>$class</literal> der Name der Klasse und <literal>$method</literal>
der Name der Methode ist die aufgerufen werden soll, &uuml;bergeben werden.
</para>
<example> <example>
<title>register_modifier (Modifikator-Plugin registrieren)</title> <title>register_modifier (Modifikator-Plugin registrieren)</title>
<programlisting> <programlisting>
@@ -1103,27 +1099,50 @@
// um "\"-Zeichen (Backslash) aus Zeichenketten zu entfernen. ('\\' wird zu '\',...)</programlisting> // um "\"-Zeichen (Backslash) aus Zeichenketten zu entfernen. ('\\' wird zu '\',...)</programlisting>
</example> </example>
</sect1> </sect1>
<sect1 id="api.register.object">
<title>register_object</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>register_object</function></funcdef>
<paramdef>string <parameter>object_name</parameter></paramdef>
<paramdef>object <parameter>$object</parameter></paramdef>
<paramdef>array <parameter>allowed methods/properties</parameter></paramdef>
<paramdef>boolean <parameter>format</parameter></paramdef>
<paramdef>array <parameter>block methods</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
Wird verwendet um ein Objekt zu registrieren. Konsultieren Sie den Abschnitt <link linkend="advanced.features.objects">Objekte</link>
f&uuml;r weitere Informationen und Beispiele.
</para>
</sect1>
<sect1 id="api.register.outputfilter"> <sect1 id="api.register.outputfilter">
<title>register_outputfilter (Ausgabefilter registrieren)</title> <title>register_outputfilter (Ausgabefilter registrieren)</title>
<funcsynopsis> <funcsynopsis>
<funcprototype> <funcprototype>
<funcdef>void <function>register_outputfilter</function></funcdef> <funcdef>void <function>register_outputfilter</function></funcdef>
<paramdef>string <parameter>function_name</parameter></paramdef> <paramdef>mixed <parameter>function</parameter></paramdef>
</funcprototype> </funcprototype>
</funcsynopsis> </funcsynopsis>
<para> <para>
Wird verwendet, um Ausgabefilter dynamisch zu registrieren. Verwenden Sie diese Funktion um dynamisch Ausgabefilter zu registrieren, welche
Ausgabefilter ver&auml;ndern die Ausgabe, die Template Ausgabe verarbeiten bevor sie angezeigt wird. Konsultieren Sie
bevor sie angezeigt wird. Konsultieren Sie dazu den den Abschnitt &uuml;ber <link linkend="advanced.features.outputfilters">Ausgabefilter</link>
Abschnitt <link linkend="advanced.features.outputfilters">template output filters</link> f&uuml;r mehr Informationen.
</para> </para>
<para>
Der Parameter <parameter>function</parameter> kann als (a) einen Funktionnamen oder (b) einem Array der Form <literal>array(&$object, $method)</literal>,
wobei <literal>&$object</literal> eine Referenz zu einem Objekt und <literal>$method</literal> der Name der Methode die aufgerufen werden soll ist,
oder als Array der Form <literal>array(&$class, $method)</literal>, wobei <literal>$class</literal> der Name der Klasse und <literal>$method</literal>
der Name der Methode ist die aufgerufen werden soll, &uuml;bergeben werden.
</para>
</sect1> </sect1>
<sect1 id="api.register.postfilter"> <sect1 id="api.register.postfilter">
<title>register_postfilter ('post'-Filter registrieren)</title> <title>register_postfilter ('post'-Filter registrieren)</title>
<funcsynopsis> <funcsynopsis>
<funcprototype> <funcprototype>
<funcdef>void <function>register_postfilter</function></funcdef> <funcdef>void <function>register_postfilter</function></funcdef>
<paramdef>string <parameter>function_name</parameter></paramdef> <paramdef>mixed <parameter>function</parameter></paramdef>
</funcprototype> </funcprototype>
</funcsynopsis> </funcsynopsis>
<para> <para>
@@ -1131,20 +1150,31 @@
auf das kompilierte Template angewendet. Konsultieren Sie dazu den auf das kompilierte Template angewendet. Konsultieren Sie dazu den
Abschnitt <link linkend="advanced.features.postfilters">template postfilters</link>. Abschnitt <link linkend="advanced.features.postfilters">template postfilters</link>.
</para> </para>
<para>
Der Parameter <parameter>function</parameter> kann als (a) einen Funktionnamen oder (b) einem Array der Form <literal>array(&$object, $method)</literal>,
wobei <literal>&$object</literal> eine Referenz zu einem Objekt und <literal>$method</literal> der Name der Methode die aufgerufen werden soll ist,
oder als Array der Form <literal>array(&$class, $method)</literal>, wobei <literal>$class</literal> der Name der Klasse und <literal>$method</literal>
der Name der Methode ist die aufgerufen werden soll, &uuml;bergeben werden.
</para>
</sect1> </sect1>
<sect1 id="api.register.prefilter"> <sect1 id="api.register.prefilter">
<title>register_prefilter ('pre'-Filter registrieren)</title> <title>register_prefilter ('pre'-Filter registrieren)</title>
<funcsynopsis> <funcsynopsis>
<funcprototype> <funcprototype>
<funcdef>void <function>register_prefilter</function></funcdef> <funcdef>void <function>register_prefilter</function></funcdef>
<paramdef>string <parameter>function_name</parameter></paramdef> <paramdef>mixed <parameter>function</parameter></paramdef>
</funcprototype> </funcprototype>
</funcsynopsis> </funcsynopsis>
<para> <para>
Wird verwendet, um 'pre'-Filter dynamisch zu registrieren. 'pre'-Filter werden Wird verwendet, um 'pre'-Filter dynamisch zu registrieren. 'pre'-Filter werden
vor der Kompilierung auf das Template angewendet. Konsultieren Sie dazu den vor der Kompilierung auf das Template angewendet. Konsultieren Sie dazu den
Abschnitt <link linkend="advanced.features.prefilters">template prefilters</link>. Abschnitt <link linkend="advanced.features.prefilters">'pre'-Filter</link>.
</para>
<para>
Der Parameter <parameter>function</parameter> kann als (a) einen Funktionnamen oder (b) einem Array der Form <literal>array(&$object, $method)</literal>,
wobei <literal>&$object</literal> eine Referenz zu einem Objekt und <literal>$method</literal> der Name der Methode die aufgerufen werden soll ist,
oder als Array der Form <literal>array(&$class, $method)</literal>, wobei <literal>$class</literal> der Name der Klasse und <literal>$method</literal>
der Name der Methode ist die aufgerufen werden soll, &uuml;bergeben werden.
</para> </para>
</sect1> </sect1>
<sect1 id="api.register.resource"> <sect1 id="api.register.resource">
@@ -1163,6 +1193,18 @@
Konsultieren Sie den Abschnitt <link linkend="template.resources">template resources</link> Konsultieren Sie den Abschnitt <link linkend="template.resources">template resources</link>
f&uuml;r weitere Informationen zum Thema. f&uuml;r weitere Informationen zum Thema.
</para> </para>
<note>
<title>Technische Bemerkung</title>
<para>
Ein Ressourcename muss mindestens 2 Zeichen lang sein. Namen mit einem (1) Zeichen
werden ignoriert und als Teil des Pfades verwenden, wie in $smarty->display('c:/path/to/index.tpl');.
</para>
</note>
<para>
Der Parameter <parameter>resource_funcs</parameter> muss aus 4 oder 5 Elementen bestehen. Wenn 4 Elemente &uuml;bergeben werden,
werden diese als Ersatz Callback-Funktionen f&uuml; "source", "timestamp", "secure" und "trusted" verwendet. Mit 5 Elementen
muss der erste Parameter eine Referenz auf das Objekt oder die Klasse sein, welche die ben&ouml;tigten Methoden bereitstellt.
</para>
<example> <example>
<title>register_resource (Ressource registrieren)</title> <title>register_resource (Ressource registrieren)</title>
<programlisting> <programlisting>
@@ -1397,7 +1439,7 @@
$smarty->caching = 2; // Lebensdauer ist pro Cache $smarty->caching = 2; // Lebensdauer ist pro Cache
// Standardwert f&uuml;r '$cache_lifetime' auf 15 Minuten setzen // Standardwert f&uuml;r '$cache_lifetime' auf 5 Minuten setzen
$smarty->cache_lifetime = 300; $smarty->cache_lifetime = 300;
$smarty->display('index.tpl'); $smarty->display('index.tpl');
@@ -1622,9 +1664,170 @@
</para> </para>
</note> </note>
</sect1> </sect1>
<sect1 id="caching.cacheable">
<title>Die Ausgabe von cachebaren Plugins Kontrollieren</title>
<para>
Seit Smarty-2.6.0 kann bei der Registrierung angegeben werden ob ein Plugin
cached werden soll. Der dritte Parameter f&uuml;r register_block, register_compiler_function
und register_function heisst <parameter>$cacheable</parameter>, der Standardwert ist TRUE, was in Smarty vor
Version 2.6.0 &uuml;blich war.
</para>
<para>
Wenn ein Plugin mit $cacheable=false registriert wird, wird er bei jedem Besuch der Seite aufgerufen, selbst wenn die Site aus dem Cache stammt. Die Pluginfunktion verh&auml;lt sich ein wenig wie <link linkend="plugins.inserts">insert</link>.
</para>
<para>
Im Gegensatz zu <link linkend="language.function.insert">{insert}</link> werden die Attribute standartm&auml;ssig nicht gecached. Sie k&ouml;nnen das caching jedoch mit dem vierten Parameter <parameter>$cache_attrs</parameter> kontrollieren. <parameter>$cache_attrs</parameter> ist ein Array aller Attributnamen die gecached wertden sollen.
</para>
<example>
<title>Preventing a plugin's output from being cached</title>
<programlisting>
index.php:
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->caching = true;
function remaining_seconds($params, &$smarty) {
$remain = $params['endtime'] - time();
if ($remain >=0)
return $remain . " second(s)";
else
return "done";
}
$smarty->register_function('remaining', 'remaining_seconds', false, array('endtime'));
if (!$smarty->is_cached('index.tpl')) {
// objekt $obj aus datenbank dem template zuweisen
$smarty->assign_by_ref('obj', $obj);
}
$smarty->display('index.tpl');
index.tpl:
Time Remaining: {remain endtime=$obj->endtime}</programlisting>
<para>
Der Wert von $obj->endtime &auml;ndert bei jeder Anzeige der Seite, selbst wenn die Seite gecached wurde. Das Objekt $obj wird nur geladen wenn die Seite nicht gecached wurde.
</para>
</example>
<example>
<title>Verhindern dass Template Bl&ouml;cke gecached werden</title>
<programlisting>
index.php:
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->caching = true;
function smarty_block_dynamic($param, $content, &$smarty) {
return $content;
}
$smarty->register_block('dynamic', 'smarty_block_dynamic', false);
$smarty->display('index.tpl');
index.tpl:
Page created: {"0"|date_format:"%D %H:%M:%S"}
{dynamic}
Now is: {"0"|date_format:"%D %H:%M:%S"}
... do other stuff ...
{/dynamic}</programlisting>
</example>
<para>
Um sicherzustellen dass ein Teil eines Templates nicht gecached werden soll, kann dieser Abschnitt in einen {dynamic}...{/dynamic} Block verpackt werden.
</para>
</sect1>
</chapter> </chapter>
<chapter id="advanced.features"> <chapter id="advanced.features">
<title>Advanced Features</title> <title>Advanced Features</title>
<sect1 id="advanced.features.objects">
<title>Objekte</title>
<para>
Smarty erlaubt es, auf PHP Objekt durch das Template zuzugreiffen. Daf&uuml;r gitbt es
zwei Wege. Der erste ist, Objekte zu registrieren und wie auf eigene Funktionen zuzugreiffen.
Der andere Weg ist, das Objekt dem Template zuzuweisen und darauf wie auf andere Variablen
zuzugreiffen. Die erste Methode hat eine nettere Template Syntax und ist sicherer da der Zugriff
auf ein registriertes Objekt mit Sicherheitseinstellungen kontrolliert werden kann. Der Nachteil
ist, dass registrierte Objekte nicht in Loops verwendet werden k<>nnen. Welchen Weg Sie einschlagen
wird von Ihren Bed&uuml;rfnissen definiert, die erste Methode ist jedoch zu bevorzugen.
</para>
<para>
Wenn Sicherheit eingeschaltet ist, k&ouml;nnen keine private Methoden (solche die einen '_'-Prefix tragen)
aufgerufen werden. Wenn eine Methode und eine Eigeschaft mit dem gleichen Namen existieren wird die Methode
verwendet.
</para>
<para>
Sie k&ouml;nnen den Zugriff auf Methoden und Eigenschaften einschr&auml;nken
indem Sie sie als Array als dritten Registrationsparameter &uuml;bergeben.
</para>
<para>
Normalerweise werden Parameter welche einem Objekt via Template &uuml;bergeben
werden genau so &uuml;bergeben wie dies bei normalen eigenen Funktionen der Fall ist.
Das erste Objekt ist ein assoziatives Array und das zweite das Smarty Objekt selbst.
Wenn Sie die Parameter einzeln erhalten m&ouml;chten k&ouml;nnen Sie den vierten
Parameter auf FALSE setzen.
</para>
<para>
Der optional f&uuml;nfte Parameter hat nur einen Effekt wenn
<parameter>format</parameter> <literal>true</literal> ist und eine Liste von
Methoden enth&auml;lt die als Block verarbeitet werden sollen.
Das bedeutet dass solche Methoden ein schliessendes Tag im Template
enthalten m&uuml;ssen (<literal>{foobar->meth2}...{/foobar->meth2}</literal>)
und die Parameter zu den Funktionen die selbe Syntax haben wie block-function-plugins:
sie erhalten 4 Parameter
<parameter>$params</parameter>,
<parameter>$content</parameter>,
<parameter>&$smarty</parameter> und
<parameter>&$repeat</parameter>
und sich auch wie block-function-plugins verhalten.
</para>
<example>
<title>ein registiertes oder zugewiesenes Objekt verwenden</title>
<programlisting>
&lt;?php
// das objekt
class My_Object {
function meth1($params, &$smarty_obj) {
return "meine meth1";
}
}
$myobj = new My_Object;
// objekt registrieren (referenz)
$smarty->register_object("foobar",$myobj);
// zugriff auf methoden und eigeschaften einschr&auml;nken
$smarty->register_object("foobar",$myobj,array('meth1','meth2','prop1'));
// wenn wir das traditionelle parameter format verwenden wollen, &uuml;bergeben wir false f&uuml;r den parameter format
$smarty->register_object("foobar",$myobj,null,false);
// objekte zuweisen (auch via referenz m&ouml;glich)
$smarty->assign_by_ref("myobj", $myobj);
$smarty->display("index.tpl");
?&gt;
TEMPLATE:
{* zugriff auf ein registriertes objekt *}
{foobar->meth1 p1="foo" p2=$bar}
{* ausgabe zuweisen *}
{foobar->meth1 p1="foo" p2=$bar assign="output"}
ausgabe war: {$output}
{* auf unser zugewiesenes objekt zugreiffen *}
{$myobj->meth1("foo",$bar)}</programlisting>
</example>
</sect1>
<sect1 id="advanced.features.prefilters"> <sect1 id="advanced.features.prefilters">
<title>'pre'-Filter</title> <title>'pre'-Filter</title>
<para> <para>
@@ -1878,7 +2081,9 @@
ein Template mit 'display()' ausgeben, die Ausgabe mit 'fetch()' ein Template mit 'display()' ausgeben, die Ausgabe mit 'fetch()'
in einer Variablen speichern oder innnerhalb eines Template ein in einer Variablen speichern oder innnerhalb eines Template ein
weiteres Template einbinden, m&uuml;ssen Sie den Ressourcen-Typ, weiteres Template einbinden, m&uuml;ssen Sie den Ressourcen-Typ,
gefolgt von Pfad und Template-Namen angeben. gefolgt von Pfad und Template-Namen angeben. Wenn kein Resourcetyp angegeben
wird, wird <link linkend="variable.default.resource.type">$default_resource_type</link>
verwendet.
</para> </para>
<sect2 id="templates.from.template.dir"> <sect2 id="templates.from.template.dir">
<title>Templates aus dem '$template_dir'</title> <title>Templates aus dem '$template_dir'</title>
@@ -2116,9 +2321,9 @@
entspricht der Reihenfolge in der sie geladen/registriert wurden. entspricht der Reihenfolge in der sie geladen/registriert wurden.
</para> </para>
<para> <para>
Aus Performancegr&uuml;nden existiert nur ein Plugin-Verzeichnis. Um ein Plugin Die <link linkend="variable.plugins.dir">plugins directory</link> Variable kann eine Zeichenkette,
zu installieren, speichern Sie es einfach in diesem Verzeichnis. Smarty wird oder ein Array mit Verzeichnisnamen sein. Um einen Plugin zu installieren k&ouml;nnen Sie ihn einfach
es danach automatisch erkennen. in einem der Verzeichnisse ablegen.
</para> </para>
</sect1> </sect1>
@@ -2198,10 +2403,11 @@
folgender Weg gew&auml;hlt werden, um das ben&ouml;tigte Plugin zu laden: folgender Weg gew&auml;hlt werden, um das ben&ouml;tigte Plugin zu laden:
</para> </para>
<programlisting> <programlisting>
require_once SMARTY_DIR . 'plugins/function.html_options.php';</programlisting> require_once $smarty->_get_plugin_filepath('function', 'html_options');</programlisting>
<para> <para>
Das Smarty Objekt wird jedem Plugin immer als letzter Parameter Das Smarty Objekt wird jedem Plugin immer als letzter Parameter
&uuml;bergeben (ausser bei Variablen-Modifikatoren). &uuml;bergeben (ausser bei Variablen-Modifikatoren und bei Bl&uuml;cken wird
<parameter>&amp;$repeat</parameter> nach dem Smarty Objekt &uuml;bergeben um R&uuml;ckw&auml;rtskompatibel zu bleiben).
</para> </para>
</sect1> </sect1>
@@ -2413,7 +2619,8 @@
<para> <para>
Ihre Funktions-Implementation wird von Smarty zweimal Ihre Funktions-Implementation wird von Smarty zweimal
aufgerufen: einmal f&uuml;r das &ouml;ffnende und einmal aufgerufen: einmal f&uuml;r das &ouml;ffnende und einmal
f&uuml;r das schliessende Tag. f&uuml;r das schliessende Tag. (konsultieren Sie den Abschnitt zu <literal>&amp;$repeat</literal>
um zu erfahren wie Sie dies &auml;ndern k&ouml;nnen.)
</para> </para>
<para> <para>
Nur das &Ouml;ffnungs-Tag kann Attribute enthalten. Alle so &uuml;bergebenen Attribute Nur das &Ouml;ffnungs-Tag kann Attribute enthalten. Alle so &uuml;bergebenen Attribute
@@ -2431,6 +2638,15 @@
Achtung: Der Template-Abschnitt den Sie erhalten, wurde bereits von Achtung: Der Template-Abschnitt den Sie erhalten, wurde bereits von
Smarty bearbeitet. Sie erhalten also die Template-Ausgabe, nicht den Template-Quelltext. Smarty bearbeitet. Sie erhalten also die Template-Ausgabe, nicht den Template-Quelltext.
</para> </para>
<para>
Der Parameter <parameter>&amp;$repeat</parameter> wird als Referenz &uuml;bergeben und
kontrolliert wie oft ein Block dargestellt werden soll. Standardwert von <parameter>$repeat</parameter>
ist beim ersten Aufruf (f&uuml;r das &ouml;ffnende Tag) <literal>true</literal>, danach immer
<literal>false</literal>.
Jedes Mal wenn eine Funktion f&uuml;r <parameter>&amp;$repeat</parameter> TRUE zur&uum;ck gibt,
wird der Inhalt zwischen {func} .. {/func} erneut mit dem ver&auml;nderten
Inhalt als <parameter>$content</parameter> Parameter aufgerufen.
</para>
<para> <para>
Wenn Sie verschachtelte Block-Funktionen haben, k&ouml;nnen Sie Wenn Sie verschachtelte Block-Funktionen haben, k&ouml;nnen Sie
die Eltern-Block-Funktion mit der <varname>$smarty->_tag_stack</varname> Variable die Eltern-Block-Funktion mit der <varname>$smarty->_tag_stack</varname> Variable
@@ -2458,11 +2674,11 @@
*/ */
function smarty_block_translate($params, $content, &amp;$smarty) function smarty_block_translate($params, $content, &amp;$smarty)
{ {
if ($content) { if (isset($content)) {
$lang = $params['lang']; $lang = $params['lang'];
// den $content irgendwie intelligent &uuml;bersetzuen // den $content irgendwie intelligent &uuml;bersetzuen
echo $translation; return $translation;
} }
}</programlisting> }</programlisting>
</example> </example>