void smarty_function_name( |
$params, | |
$content, | ||
&$smarty, | ||
&$repeat) ; |
array $params
;mixed $content
;object &$smarty
;boolean &$repeat
;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.
Ihre Funktions-Implementation wird von Smarty zweimal
aufgerufen: einmal für das öffnende und einmal
für das schliessende Tag. (konsultieren Sie den Abschnitt zu &$repeat
um zu erfahren wie Sie dies ändern können.)
Nur das Öffnungs-Tag kann Attribute enthalten. Alle so übergebenen Attribute
werden als assoziatives Array $params
der Template-Funktion
übergeben. Sie können auf die Werte entweder direkt mit $params['start']
zugreifen oder sie mit extract($params)
in die Symbol-Tabelle
importieren. Die Attribute aus dem Öffnungs-Tag stehen auch beim Aufruf für das
schliessende Tag zur Verfügung.
Der Inhalt der $content
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 null
,
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.
Der Parameter &$repeat
wird als Referenz übergeben und
kontrolliert wie oft ein Block dargestellt werden soll. Standardwert von $repeat
ist beim ersten Aufruf (für das öffnende Tag) true
, danach immer
false
.
Jedes Mal wenn eine Funktion für &$repeat
TRUE zurück gibt,
wird der Inhalt zwischen {func} .. {/func} erneut mit dem veränderten
Inhalt als $content
Parameter aufgerufen.
Wenn Sie verschachtelte Block-Funktionen haben, können Sie
die Eltern-Block-Funktion mit der $smarty->_tag_stack
Variable
herausfinden. Lassen Sie sich ihren Inhalt mit 'var_dump()' ausgeben.
Die Struktur sollte selbsterklärend sein.
Sehen Sie dazu: register_block(), unregister_block().
Example 16.5. Block-Funktionen
<?php /* * Smarty plugin * ------------------------------------------------------------- * File: block.translate.php * Type: block * Name: translate * Purpose: translate a block of text * ------------------------------------------------------------- */ function smarty_block_translate($params, $content, &$smarty, &$repeat) { if (isset($content)) { $lang = $params['lang']; // den $content irgendwie intelligent übersetzen return $translation; } } ?>