sync with en

This commit is contained in:
messju
2005-12-11 13:13:38 +00:00
parent 95861c7804
commit 8bcf265ae3
5 changed files with 335 additions and 283 deletions

View File

@@ -4,38 +4,53 @@
<sect1 id="advanced.features.objects"> <sect1 id="advanced.features.objects">
<title>Objekte</title> <title>Objekte</title>
<para> <para>
Smarty erlaubt es, auf PHP Objekt durch das Template zuzugreifen. Daf&uuml;r gibt es Smarty erlaubt es, auf <ulink
zwei Wege. Der erste ist, Objekte zu registrieren und wie auf eine eigene Funktion zuzugreifen. url="&url.php-manual;object">PHP-Objekte</ulink> durch das Template
Der andere Weg ist, das Objekt dem Template zuzuweisen und darauf wie auf andere Variablen zuzugreifen. Daf<61>r gibt es zwei Wege. Der erste ist, Objekte zu
zuzugreifen. Die erste Methode hat eine nettere Template Syntax und ist sicherer da der Zugriff <link linkend="api.register.object">registrieren</link> und wie auf
auf ein registriertes Objekt mit Sicherheitseinstellungen kontrolliert werden kann. Der Nachteil eine <link linkend="language.custom.functions">eigene
ist, dass registrierte Objekte nicht in Loops verwendet werden k&ouml;nnen. Welchen Weg Sie einschlagen Funktion</link> zuzugreifen. Der andere Weg ist, das Objekt dem
wird von Ihren Bed&uuml;rfnissen definiert, die erste Methode ist jedoch zu bevorzugen. Template mit <link linkend="api.assign">assign()</link> zuzuweisen
und darauf wie auf andere Variablen zuzugreifen. 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 <20>ber registrierte Objekte nicht
in einer Schlaufe gelaufen werden kann und, dass es nicht m<>glich
ist, Arrays registrierten Objekten anzulegen. Welchen Weg Sie
einschlagen wird von Ihren Bed<65>rfnissen definiert, die erste Methode
ist jedoch zu bevorzugen.
</para> </para>
<para> <para>
Wenn die Sicherheitsfunktionen eingeschaltet sind, k&ouml;nnen keine private Methoden (solche die einen '_'-Prefix tragen) Wenn die <link
aufgerufen werden. Wenn eine Methode und eine Eigeschaft mit dem gleichen Namen existieren wird die Methode linkend="variable.security">Sicherheitsfunktionen</link>
eingeschaltet sind, k<>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. verwendet.
</para> </para>
<para> <para>
Sie k&ouml;nnen den Zugriff auf Methoden und Eigenschaften einschr&auml;nken Sie k<EFBFBD>nnen den Zugriff auf Methoden und Eigenschaften
indem Sie sie als Array als dritten Registrationsparameter &uuml;bergeben. einschr<EFBFBD>nken indem Sie sie als Array als dritten
Registrationsparameter <20>bergeben.
</para> </para>
<para> <para>
Normalerweise werden Parameter welche einem Objekt via Template &uuml;bergeben Normalerweise werden Parameter welche einem Objekt via Template
werden genau so &uuml;bergeben wie dies bei normalen eigenen Funktionen der Fall ist. <EFBFBD>bergeben werden genau so <EFBFBD>bergeben wie dies bei normalen <link
Das erste Objekt ist ein assoziatives Array und das zweite das Smarty Objekt selbst. linkend="language.custom.functions">eigenen Funktionen</link> der
Wenn Sie die Parameter einzeln erhalten m&ouml;chten k&ouml;nnen Sie den vierten Fall ist. Das erste Objekt ist ein assoziatives Array und das
Parameter auf FALSE setzen. zweite das Smarty Objekt selbst. Wenn Sie die Parameter einzeln
erhalten m<>chten k<>nnen Sie den vierten Parameter auf
<literal>false</literal> setzen.
</para> </para>
<para> <para>
Der optionale f&uuml;nfte Parameter hat nur einen Effekt wenn Der optionale f<EFBFBD>nfte Parameter hat nur einen Effekt wenn
<parameter>format</parameter> = <literal>true</literal> ist und eine Liste von <parameter>format</parameter> = <literal>true</literal> ist und eine
Methoden enth&auml;lt die als Block verarbeitet werden sollen. Liste von Methoden enth<EFBFBD>lt die als Block verarbeitet werden sollen.
Das bedeutet, dass solche Methoden ein schliessendes Tag im Template Das bedeutet, dass solche Methoden ein schliessendes Tag im Template
enthalten m&uuml;ssen (<literal>{foobar->meth2}...{/foobar->meth2}</literal>) enthalten m<EFBFBD>ssen
und die Parameter zu den Funktionen die selbe Syntax haben wie block-function-plugins: (<literal>{foobar->meth2}...{/foobar->meth2}</literal>) und die
sie erhalten also die 4 Parameter Parameter zu den Funktionen die selbe Syntax haben wie
block-function-plugins: sie erhalten also die 4 Parameter
<parameter>$params</parameter>, <parameter>$params</parameter>,
<parameter>$content</parameter>, <parameter>$content</parameter>,
<parameter>&amp;$smarty</parameter> und <parameter>&amp;$smarty</parameter> und
@@ -44,42 +59,54 @@
</para> </para>
<example> <example>
<title>registierte oder zugewiesene Objekte verwenden</title> <title>registierte oder zugewiesene Objekte verwenden</title>
<programlisting> <programlisting role="php">
&lt;?php <![CDATA[
// das objekt <?php
// Das Objekt
class My_Object { class My_Object {
function meth1($params, &amp;$smarty_obj) { function meth1($params, &$smarty_obj) {
return "meine meth1"; return "meine meth1";
} }
} }
$myobj = new My_Object; $myobj = new My_Object;
// objekt registrieren (referenz) // Objekt registrieren (referenz)
$smarty->register_object("foobar",$myobj); $smarty->register_object("foobar",$myobj);
// zugriff auf methoden und eigeschaften einschr&auml;nken // Zugriff auf Methoden und Eigeschaften einschr<EFBFBD>nken
$smarty->register_object("foobar",$myobj,array('meth1','meth2','prop1')); $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 // wenn wir das traditionelle Parameterformat verwenden wollen, <EFBFBD>bergeben wir false f<EFBFBD>r den Parameter format
$smarty->register_object("foobar",$myobj,null,false); $smarty->register_object("foobar",$myobj,null,false);
// objekte zuweisen (auch via referenz m&ouml;glich) // Objekte zuweisen (auch via Referenz m<EFBFBD>glich)
$smarty->assign_by_ref("myobj", $myobj); $smarty->assign_by_ref("myobj", $myobj);
$smarty->display("index.tpl"); $smarty->display('index.tpl');
?&gt; ?>
]]>
TEMPLATE: </programlisting>
<para>
{* zugriff auf ein registriertes objekt *} Und hier das dazugeh<65>rige index.tpl:
</para>
<programlisting>
<![CDATA[
{* Zugriff auf ein registriertes objekt *}
{foobar->meth1 p1="foo" p2=$bar} {foobar->meth1 p1="foo" p2=$bar}
{* ausgabe zuweisen *} {* Ausgabe zuweisen *}
{foobar->meth1 p1="foo" p2=$bar assign="output"} {foobar->meth1 p1="foo" p2=$bar assign="output"}
ausgabe war: {$output} ausgabe war: {$output}
{* auf unser zugewiesenes objekt zugreiffen *} {* auf unser zugewiesenes Objekt zugreifen *}
{$myobj->meth1("foo",$bar)}</programlisting> {$myobj->meth1("foo",$bar)}
]]>
</programlisting>
</example> </example>
<para>
Siehe auch <link
linkend="api.register.object">register_object()</link> und <link
linkend="api.assign">assign()</link>
</para>
</sect1> </sect1>
<!-- Keep this comment at the end of the file <!-- Keep this comment at the end of the file
Local variables: Local variables:

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="iso-8859-1"?> <?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision$ --> <!-- $Revision$ -->
<!-- EN-Revision: 1.1 Maintainer: andreas Status: ready --> <!-- EN-Revision: 1.2 Maintainer: andreas Status: ready -->
<sect1 id="advanced.features.outputfilters"> <sect1 id="advanced.features.outputfilters">
<title>Ausgabefilter</title> <title>Ausgabefilter</title>
<para> <para>
@@ -21,14 +21,14 @@
</para> </para>
<example> <example>
<title>Ausgabefilter verwenden</title> <title>Ausgabefilter verwenden</title>
<programlisting> <programlisting role="php">
&lt;?php <![CDATA[
<?php
// f&uuml;gen Sie folgende Zeilen in Ihre Applikation ein // f<>gen Sie folgende Zeilen in Ihre Applikation ein
function protect_email($tpl_output, &amp;$smarty) function protect_email($tpl_output, &$smarty)
{ {
$tpl_output = $tpl_output = preg_replace('!(\S+)@([a-zA-Z0-9\.\-]+\.([a-zA-Z]{2,3}|[0-9]{1,3}))!',
preg_replace('!(\S+)@([a-zA-Z0-9\.\-]+\.([a-zA-Z]{2,3}|[0-9]{1,3}))!',
'$1%40$2', $tpl_output); '$1%40$2', $tpl_output);
return $tpl_output; return $tpl_output;
} }
@@ -40,7 +40,9 @@
// von nun an erhalten alle ausgegebenen e-mail Adressen einen // von nun an erhalten alle ausgegebenen e-mail Adressen einen
// einfach Schutz vor Spambots. // einfach Schutz vor Spambots.
?&gt;</programlisting> ?>
]]>
</programlisting>
</example> </example>
</sect1> </sect1>
<!-- Keep this comment at the end of the file <!-- Keep this comment at the end of the file

View File

@@ -1,38 +1,46 @@
<?xml version="1.0" encoding="iso-8859-1"?> <?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision$ --> <!-- $Revision$ -->
<!-- EN-Revision: 1.1 Maintainer: andreas Status: ready --> <!-- EN-Revision: 1.4 Maintainer: andreas Status: ready -->
<sect1 id="advanced.features.postfilters"> <sect1 id="advanced.features.postfilters">
<title>'post'-Filter</title> <title>Postfilter</title>
<para> <para>
Template 'post'-Filter sind Filter, welche auf das Template nach dessen Kompilierung Template Postfilter sind Filter, welche auf das Template nach dessen Kompilierung
angewendet werden. 'post'-Filter k&ouml;nnen auf verschiedene Arten angewendet werden. Postfilter k<EFBFBD>nnen auf verschiedene Arten
geladen werden. Man kann sie <link linkend="api.register.prefilter">registrieren</link>, 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 aus dem Plugin-Verzeichnis mit <link linkend="api.load.filter">load_filter()</link> laden
oder <link linkend="variable.autoload.filters">$autoload_filters</link> verwenden. oder <link linkend="variable.autoload.filters">$autoload_filters</link> verwenden.
Smarty &uuml;bergibt der Funktion als ersten Parameter den Template-Quellcode und erwartet Smarty <EFBFBD>bergibt der Funktion als ersten Parameter den Template-Quellcode und erwartet
als R&uuml;ckgabewert den bearbeiteten Quellcode. als R<EFBFBD>ckgabewert den bearbeiteten Quellcode.
</para> </para>
<example> <example>
<title>Template 'post'-Filter verwenden</title> <title>Template Postfilter verwenden</title>
<programlisting> <programlisting>
&lt;?php <![CDATA[
<?php
// f&uuml;gen Sie folgende Zeilen in Ihre Applikation ein // f<>gen Sie folgende Zeilen in Ihre Applikation ein
function add_header_comment($tpl_source, &amp;$smarty) function add_header_comment($tpl_source, &$smarty)
{ {
return "&lt;?php echo \"&lt;!-- Created by Smarty! --&gt;\n\" ?&gt;\n".$tpl_source; return "<?php echo \"<!-- Created by Smarty! -->\n\" ?>\n".$tpl_source;
} }
// registrieren Sie den Postfilter
// registrieren Sie den 'post'-Filter
$smarty->register_postfilter("add_header_comment"); $smarty->register_postfilter("add_header_comment");
$smarty->display("index.tpl"); $smarty->display("index.tpl");
?&gt; ?>
{* kompiliertes Smarty Template 'index.tpl' *} {* kompiliertes Smarty Template 'index.tpl' *}
&lt;!-- Created by Smarty! --&gt; <!-- Created by Smarty! -->
{* Rest des Template Inhalts... *}</programlisting> {* Rest des Template Inhalts... *}
]]>
</programlisting>
</example> </example>
<para>
Sie auch <link
linkend="api.register.postfilter">register_postfilter()</link>,
<link linkend="advanced.features.prefilters">Prefilter</link> und
<link linkend="api.load.filter">load_filter()</link>
</para>
</sect1> </sect1>
<!-- Keep this comment at the end of the file <!-- Keep this comment at the end of the file
Local variables: Local variables:

View File

@@ -1,39 +1,50 @@
<?xml version="1.0" encoding="iso-8859-1"?> <?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision$ --> <!-- $Revision$ -->
<!-- EN-Revision: 1.1 Maintainer: andreas Status: ready --> <!-- EN-Revision: 1.3 Maintainer: andreas Status: ready -->
<sect1 id="advanced.features.prefilters"> <sect1 id="advanced.features.prefilters">
<title>'pre'-Filter</title> <title>Prefilter</title>
<para> <para>
Template 'pre'-Filter sind Filter, welche auf das Template vor dessen Kompilierung Template Prefilter sind Filter, welche auf das Template vor dessen Kompilierung
angewendet werden. Dies ist n&uuml;tzlich, um zum Beispiel Kommentare zu entfernen angewendet werden. Dies ist n<EFBFBD>tzlich, um zum Beispiel Kommentare zu entfernen
oder um den Inhalt des Templates zu analysieren. 'pre'-Filter k&ouml;nnen auf verschiedene oder um den Inhalt des Templates zu analysieren. Prefilter k<>nnen auf verschiedene
Arten geladen werden. Man kann sie <link linkend="api.register.prefilter">registrieren</link>, 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 aus dem Plugin-Verzeichnis mit <link linkend="api.load.filter">load_filter()</link> laden
oder <link linkend="variable.autoload.filters">$autoload_filters</link> verwenden. oder <link linkend="variable.autoload.filters">$autoload_filters</link> verwenden.
Smarty &uuml;bergibt der Funktion als ersten Parameter den Template-Quellcode und erwartet Smarty <EFBFBD>bergibt der Funktion als ersten Parameter den Template-Quellcode und erwartet
als R&uuml;ckgabewert den bearbeiteten Quellcode. als R<EFBFBD>ckgabewert den bearbeiteten Quellcode.
</para> </para>
<example> <example>
<title>Template 'pre'-Filter verwenden</title> <title>Template Prefilter verwenden</title>
<para>
Dieser Prefiler entfernt alle Kommentare aus dem Template-Quelltext
</para>
<programlisting> <programlisting>
&lt;?php <![CDATA[
<?php
// f&uuml;gen Sie folgende Zeilen in Ihre Applikation ein // f<>gen Sie folgende Zeilen in Ihre Applikation ein
function remove_dw_comments($tpl_source, &amp;$smarty) function remove_dw_comments($tpl_source, &$smarty)
{ {
return preg_replace("/&lt;!--#.*--&gt;/U","",$tpl_source); return preg_replace("/<!--#.*-->/U",'',$tpl_source);
} }
// registrieren Sie den Prefilter
// registrieren Sie den 'pre'-Filter
$smarty->register_prefilter("remove_dw_comments"); $smarty->register_prefilter("remove_dw_comments");
$smarty->display("index.tpl"); $smarty->display("index.tpl");
?&gt; ?>
{* Smarty Template 'index.tpl' *} {* Smarty Template 'index.tpl' *}
&lt;!--# diese Zeile wird vom 'pre'-Filter entfernt--&gt;</programlisting> <!--# diese Zeile wird vom Prefilter entfernt-->
]]>
</programlisting>
</example> </example>
<para>
Sie auch <link
linkend="api.register.prefilter">register_prefilter()</link>,
<link linkend="advanced.features.postfilters">Postfilter</link> und
<link linkend="api.load.filter">load_filter()</link>
</para>
</sect1> </sect1>
<!-- Keep this comment at the end of the file <!-- Keep this comment at the end of the file
Local variables: Local variables:

View File

@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="iso-8859-1"?> <?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision$ --> <!-- $Revision$ -->
<!-- EN-Revision: 1.2 Maintainer: andreas Status: ready --> <!-- EN-Revision: 1.3 Maintainer: andreas Status: ready -->
<sect1 id="section.template.cache.handler.func"> <sect1 id="section.template.cache.handler.func">
<title>Cache Handler Funktion</title> <title>Cache Handler Funktion</title>
<para> <para>
Als Alternative zum normalen dateibasierten Caching-Mechanismus k&ouml;nnen Sie Als Alternative zum normalen dateibasierten Caching-Mechanismus k<EFBFBD>nnen Sie
eine eigene Cache-Handler Funktion zum lesen, schreiben und l&ouml;schen von eine eigene Cache-Handler Funktion zum lesen, schreiben und l<EFBFBD>schen von
Cache-Dateien definieren. Cache-Dateien definieren.
</para> </para>
<para> <para>
@@ -14,30 +14,34 @@
<link linkend="variable.cache.handler.func">$cache_handler_func</link> zu. <link linkend="variable.cache.handler.func">$cache_handler_func</link> zu.
Smarty wird von da an Ihre Funktion zur Bearbeitung des Caches verwenden. Smarty wird von da an Ihre Funktion zur Bearbeitung des Caches verwenden.
Als erster Parameter wird die 'action' mit einem der folgendende Werte Als erster Parameter wird die 'action' mit einem der folgendende Werte
&uuml;bergeben: 'read', 'write' und 'clear'. Als zweiter Parameter <EFBFBD>bergeben: 'read', 'write' und 'clear'. Als zweiter Parameter
wird das Smarty-Objekt &uuml;bergeben, als dritter der gecachte Inhalt. Bei einem wird das Smarty-Objekt <EFBFBD>bergeben, als dritter der gecachte Inhalt. Bei einem
'write' &uuml;bergibt Smarty den gecachten Inhalt, bei 'read' &uuml;bergibt Smarty die 'write' <EFBFBD>bergibt Smarty den gecachten Inhalt, bei 'read' <EFBFBD>bergibt Smarty die
Variable als Referenz und erwartet, dass Ihre Funktion die Inhalte zuweist. Variable als Referenz und erwartet, dass Ihre Funktion die Inhalte zuweist.
Bei 'clear' k&ouml;nnen Sie eine dummy-Variable &uuml;bergeben. Als vierter Parameter Bei 'clear' k<EFBFBD>nnen Sie eine dummy-Variable <EFBFBD>bergeben. Als vierter Parameter
wird der Template-Name &uuml;bergeben (verwendet bei 'write'/'read'), als f&uuml;nfter wird der Template-Name <EFBFBD>bergeben (verwendet bei 'write'/'read'), als f<EFBFBD>nfter
Parameter die 'cache_id' (optional) und als sechster die 'compile_id' (auch optional). Parameter die 'cache_id' (optional) und als sechster die 'compile_id' (auch optional).
</para> </para>
<para>
Der letzte Parameter (<parameter>$exp_time</parameter>) wurde in
Smarty-2.6.0 hinzugef<65>gt.
</para>
<example> <example>
<title>Beispiel mit einer MySQL Datenbank als Datenquelle</title> <title>Beispiel mit einer MySQL Datenbank als Datenquelle</title>
<programlisting> <programlisting role="php">
<![CDATA[ <![CDATA[
<?php <?php
/* /*
Beispiel Anwendung: Beispiel Anwendung:
include('Smarty.class.php'); include('Smarty.class.php');
include('mysql_cache_handler.php'); include('mysql_cache_handler.php');
$smarty = new Smarty; $smarty = new Smarty;
$smarty-&gt;cache_handler_func = 'mysql_cache_handler'; $smarty->cache_handler_func = 'mysql_cache_handler';
$smarty-&gt;display('index.tpl');
$smarty->display('index.tpl');
die Datenbank hat folgendes Format: die Datenbank hat folgendes Format:
@@ -61,12 +65,11 @@
$db_name = 'SMARTY_CACHE'; $db_name = 'SMARTY_CACHE';
$use_gzip = false; $use_gzip = false;
// enmalige 'cache_id' erzeugen // enmalige 'cache_id' erzeugen
$CacheID = md5($tpl_file.$cache_id.$compile_id); $CacheID = md5($tpl_file.$cache_id.$compile_id);
if(! $link = mysql_pconnect($db_host, $db_user, $db_pass)) { if(! $link = mysql_pconnect($db_host, $db_user, $db_pass)) {
$smarty_obj-&gt;_trigger_error_msg("cache_handler: could not connect to database"); $smarty_obj->_trigger_error_msg("cache_handler: could not connect to database");
return false; return false;
} }
mysql_select_db($db_name); mysql_select_db($db_name);
@@ -77,7 +80,7 @@
// Cache aus der Datenbank lesen // Cache aus der Datenbank lesen
$results = mysql_query("select CacheContents from CACHE_PAGES where CacheID='$CacheID'"); $results = mysql_query("select CacheContents from CACHE_PAGES where CacheID='$CacheID'");
if(!$results) { if(!$results) {
$smarty_obj-&gt;_trigger_error_msg("cache_handler: query failed."); $smarty_obj->_trigger_error_msg("cache_handler: query failed.");
} }
$row = mysql_fetch_array($results,MYSQL_ASSOC); $row = mysql_fetch_array($results,MYSQL_ASSOC);
@@ -88,6 +91,7 @@
} }
$return = $results; $return = $results;
break; break;
case 'write': case 'write':
// Cache in Datenbank speichern // Cache in Datenbank speichern
@@ -102,29 +106,29 @@
'".addslashes($contents)."') '".addslashes($contents)."')
"); ");
if(!$results) { if(!$results) {
$smarty_obj-&gt;_trigger_error_msg("cache_handler: query failed."); $smarty_obj->_trigger_error_msg("cache_handler: query failed.");
} }
$return = $results; $return = $results;
break; break;
case 'clear': case 'clear':
// Cache Informationen l&ouml;schen // Cache Informationen l<EFBFBD>schen
if(empty($cache_id) &amp;&amp; empty($compile_id) &amp;&amp; empty($tpl_file)) { if(empty($cache_id) &amp;&amp; empty($compile_id) &amp;&amp; empty($tpl_file)) {
// alle l&ouml;schen // alle l<EFBFBD>schen
$results = mysql_query("delete from CACHE_PAGES"); $results = mysql_query("delete from CACHE_PAGES");
} else { } else {
$results = mysql_query("delete from CACHE_PAGES where CacheID='$CacheID'"); $results = mysql_query("delete from CACHE_PAGES where CacheID='$CacheID'");
} }
if(!$results) { if(!$results) {
$smarty_obj-&gt;_trigger_error_msg("cache_handler: query failed."); $smarty_obj->_trigger_error_msg("cache_handler: query failed.");
} }
$return = $results; $return = $results;
break; break;
default: default:
// Fehler, unbekannte 'action' // Fehler, unbekannte 'action'
$smarty_obj-&gt;_trigger_error_msg("cache_handler: unknown action \"$action\""); $smarty_obj->_trigger_error_msg("cache_handler: unknown action \"$action\"");
$return = false; $return = false;
break; break;
} }