diff --git a/docs/de/programmers/advanced-features/advanced-features-objects.xml b/docs/de/programmers/advanced-features/advanced-features-objects.xml index beaf35dc..88ed2ea0 100644 --- a/docs/de/programmers/advanced-features/advanced-features-objects.xml +++ b/docs/de/programmers/advanced-features/advanced-features-objects.xml @@ -1,85 +1,112 @@ - - Objekte - - Smarty erlaubt es, auf PHP Objekt durch das Template zuzugreifen. Dafür gibt es - zwei Wege. Der erste ist, Objekte zu registrieren und wie auf eine eigene Funktion zuzugreifen. - Der andere Weg ist, das Objekt dem Template 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 registrierte Objekte nicht in Loops verwendet werden können. Welchen Weg Sie einschlagen - wird von Ihren Bedürfnissen definiert, die erste Methode ist jedoch zu bevorzugen. - - - Wenn die Sicherheitsfunktionen 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. - - - Sie können den Zugriff auf Methoden und Eigenschaften einschränken - indem Sie sie als Array als dritten Registrationsparameter übergeben. - - - Normalerweise werden Parameter welche einem Objekt via Template übergeben - werden genau so ü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öchten können Sie den vierten - Parameter auf FALSE setzen. - - - Der optionale fünfte Parameter hat nur einen Effekt wenn - format = true ist und eine Liste von - Methoden enthält die als Block verarbeitet werden sollen. - Das bedeutet, dass solche Methoden ein schliessendes Tag im Template - enthalten müssen ({foobar->meth2}...{/foobar->meth2}) - und die Parameter zu den Funktionen die selbe Syntax haben wie block-function-plugins: - sie erhalten also die 4 Parameter - $params, - $content, - &$smarty und - &$repeat, - und verhalten sich auch sonst wie block-function-plugins. - - - registierte oder zugewiesene Objekte verwenden - -<?php -// das objekt + + Objekte + + Smarty erlaubt es, auf PHP-Objekte durch das Template + zuzugreifen. Dafür gibt es zwei Wege. Der erste ist, Objekte zu + registrieren und wie auf + eine eigene + Funktion zuzugreifen. Der andere Weg ist, das Objekt dem + Template mit assign() 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 ü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ürfnissen definiert, die erste Methode + ist jedoch zu bevorzugen. + + + Wenn die Sicherheitsfunktionen + 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. + + + Sie können den Zugriff auf Methoden und Eigenschaften + einschränken indem Sie sie als Array als dritten + Registrationsparameter übergeben. + + + Normalerweise werden Parameter welche einem Objekt via Template + übergeben werden genau so ü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öchten können Sie den vierten Parameter auf + false setzen. + + + Der optionale fünfte Parameter hat nur einen Effekt wenn + format = true ist und eine + Liste von Methoden enthält die als Block verarbeitet werden sollen. + Das bedeutet, dass solche Methoden ein schliessendes Tag im Template + enthalten müssen + ({foobar->meth2}...{/foobar->meth2}) und die + Parameter zu den Funktionen die selbe Syntax haben wie + block-function-plugins: sie erhalten also die 4 Parameter + $params, + $content, + &$smarty und + &$repeat, + und verhalten sich auch sonst wie block-function-plugins. + + + registierte oder zugewiesene Objekte verwenden + +register_object("foobar",$myobj); -// zugriff auf methoden und eigeschaften einschränken +// Zugriff auf Methoden und Eigeschaften einschränken $smarty->register_object("foobar",$myobj,array('meth1','meth2','prop1')); -// wenn wir das traditionelle parameter format verwenden wollen, übergeben wir false für den parameter format +// wenn wir das traditionelle Parameterformat verwenden wollen, übergeben wir false für den Parameter format $smarty->register_object("foobar",$myobj,null,false); -// objekte zuweisen (auch via referenz möglich) +// Objekte zuweisen (auch via Referenz möglich) $smarty->assign_by_ref("myobj", $myobj); -$smarty->display("index.tpl"); -?> - -TEMPLATE: - -{* zugriff auf ein registriertes objekt *} +$smarty->display('index.tpl'); +?> +]]> + + + Und hier das dazugehörige index.tpl: + + +meth1 p1="foo" p2=$bar} -{* ausgabe zuweisen *} +{* Ausgabe zuweisen *} {foobar->meth1 p1="foo" p2=$bar assign="output"} ausgabe war: {$output} -{* auf unser zugewiesenes objekt zugreiffen *} -{$myobj->meth1("foo",$bar)} - +{* auf unser zugewiesenes Objekt zugreifen *} +{$myobj->meth1("foo",$bar)} +]]> + + + + Siehe auch register_object() und assign() + - + Ausgabefilter @@ -19,29 +19,31 @@ Smarty übergibt der Funktion als ersten Parameter die Template-Ausgabe und erwartet als Rückgabewert die bearbeitete Ausgabe. - - Ausgabefilter verwenden - - <?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"); + + Ausgabefilter verwenden + + - +// 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. +?> +]]> + + - - - 'post'-Filter - - 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 registrieren, - aus dem Plugin-Verzeichnis mit load_filter() laden - oder $autoload_filters verwenden. - Smarty übergibt der Funktion als ersten Parameter den Template-Quellcode und erwartet - als Rückgabewert den bearbeiteten Quellcode. - - - Template 'post'-Filter verwenden - - <?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... *} - + + + Postfilter + + Template Postfilter sind Filter, welche auf das Template nach dessen Kompilierung + angewendet werden. Postfilter können auf verschiedene Arten + geladen werden. Man kann sie registrieren, + aus dem Plugin-Verzeichnis mit load_filter() laden + oder $autoload_filters verwenden. + Smarty übergibt der Funktion als ersten Parameter den Template-Quellcode und erwartet + als Rückgabewert den bearbeiteten Quellcode. + + + Template Postfilter verwenden + +\n\" ?>\n".$tpl_source; +} + +// registrieren Sie den Postfilter +$smarty->register_postfilter("add_header_comment"); +$smarty->display("index.tpl"); +?> + +{* kompiliertes Smarty Template 'index.tpl' *} + +{* Rest des Template Inhalts... *} +]]> + + + + Sie auch register_postfilter(), + Prefilter und + load_filter() + - - - 'pre'-Filter - - 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 registrieren, - aus dem Plugin-Verzeichnis mit load_filter() laden - oder $autoload_filters verwenden. - Smarty übergibt der Funktion als ersten Parameter den Template-Quellcode und erwartet - als Rückgabewert den bearbeiteten Quellcode. - - - Template 'pre'-Filter verwenden - - <?php + + + Prefilter + + Template Prefilter 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. Prefilter können auf verschiedene + Arten geladen werden. Man kann sie registrieren, + aus dem Plugin-Verzeichnis mit load_filter() laden + oder $autoload_filters verwenden. + Smarty übergibt der Funktion als ersten Parameter den Template-Quellcode und erwartet + als Rückgabewert den bearbeiteten Quellcode. + + + Template Prefilter verwenden + + Dieser Prefiler entfernt alle Kommentare aus dem Template-Quelltext + + +/U",'',$tpl_source); +} + +// registrieren Sie den Prefilter +$smarty->register_prefilter("remove_dw_comments"); +$smarty->display("index.tpl"); +?> + +{* Smarty Template 'index.tpl' *} - - // 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--> - + +]]> + + + + Sie auch register_prefilter(), + Postfilter und + load_filter() + - - - Cache Handler Funktion - - 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. - - - Schreiben Sie eine Funktion in Ihrer Applikation, die Smarty als - Cache-Handler verwenden soll und weisen Sie deren Name der Variable - $cache_handler_func 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). - - - Beispiel mit einer MySQL Datenbank als Datenquelle - + + + Cache Handler Funktion + + 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. + + + Schreiben Sie eine Funktion in Ihrer Applikation, die Smarty als + Cache-Handler verwenden soll und weisen Sie deren Name der Variable + $cache_handler_func 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). + + + Der letzte Parameter ($exp_time) wurde in + Smarty-2.6.0 hinzugefügt. + + + Beispiel mit einer MySQL Datenbank als Datenquelle + 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; + +} + ?> ]]> - - + +