块函数

|void smartyblock_name(|$params, |
| |
$content, |
| |
$template, |
| |
&$repeat_);|

array $params;mixed $content;object $template;boolean &$repeat;

块函数的形式是:{func} .. {/func}。换句话说,它们用标签圈起一个块,然后对这个块的内容进行操作。块函数优先于同名的自定义函数,这样,你不能同时有自定义函数{func}和块函数{func}..{/func}

  • 默认你的函数将被Smarty调用两次,在开始标签位置调用和在结束标签位置调用。 (参考下面如何通过$repeat来改变这种情况)

  • 从Smarty 3.1开始,开始标签的返回值将会被显示。

  • 块函数只有在开始标签时才有 属性。 模板中传递给块函数的属性都包含在$params参数数组中。 在处理结束标签时,这些属性也是可用的。

  • $content的值,取决于函数在执行开始标签还是结束标签。当在开始标签时,它会是null;当在结束标签时,它会是模板块里面全部的内容。注意模板块已经是被Smarty处理过的,所以你得到的内容是模板块的输出内容,而不是模板块的源代码。

  • $repeat是一个引用值,能控制块可以被显示多少次。当块函数被第一次调用时(开始标签),$repeat默认是true;随后的调用(结束标签)都是false。 每次当块函数返回时将$repeat设成true,{func}…{/func}间的内容会被再次计算,计算结果保存$content参数内,在并且函数将被再次执行。

如果使用了嵌套的块函数,可以通过$smarty->_tag_stack变量来找到父块的函数。只要对其用一下var_dump()就可以知道整个层次结构了。


Example 18.5. 块函数

  1. <?php
  2. /*
  3. * Smarty plugin
  4. * -------------------------------------------------------------
  5. * File: block.translate.php
  6. * Type: block
  7. * Name: translate
  8. * Purpose: 翻译一块文字
  9. * -------------------------------------------------------------
  10. */
  11. function smarty_block_translate($params, $content, Smarty_Internal_Template $template, &$repeat)
  12. {
  13. // 只在结束标签时输出
  14. if(!$repeat){
  15. if (isset($content)) {
  16. $lang = $params['lang'];
  17. // 翻译$content的内容
  18. return $translation;
  19. }
  20. }
  21. }
  22. ?>
  23.  

参见: registerPlugin(), unregisterPlugin().

原文: https://www.smarty.net/docs/zh_CN/plugins.block.functions.tpl