模板函数

|void smartyfunction_name(|$params, |
| |
$template_);|

array $params;object $template;

模板传递到函数的参数变量,都包含在$params数组内。

函数输出(返回值)的内容将替代函数标签调用的位置,如{fetch}函数。同时,函数也可以仅执行一些任务而没有输出,如 {assign}函数。

如果函数中对模板赋值,或使用其他Smarty提供的功能,可以通过 $template对象来进行,例如$template->foo()


Example 18.1. 带输出的函数插件

  1. <?php
  2. /*
  3. * Smarty plugin
  4. * -------------------------------------------------------------
  5. * File: function.eightball.php
  6. * Type: function
  7. * Name: eightball
  8. * Purpose: 输出一个随机的答案
  9. * -------------------------------------------------------------
  10. */
  11. function smarty_function_eightball($params, Smarty_Internal_Template $template)
  12. {
  13. $answers = array('Yes',
  14. 'No',
  15. 'No way',
  16. 'Outlook not so good',
  17. 'Ask again soon',
  18. 'Maybe in your reality');
  19.  
  20. $result = array_rand($answers);
  21. return $answers[$result];
  22. }
  23. ?>
  24.  

模板中:

  1. Question: Will we ever have time travel?
  2. Answer: {eightball}.


Example 18.2. 不带输出的函数插件

  1. <?php
  2. /*
  3. * Smarty plugin
  4. * -------------------------------------------------------------
  5. * File: function.assign.php
  6. * Type: function
  7. * Name: assign
  8. * Purpose: 赋值一个变量到模板
  9. * -------------------------------------------------------------
  10. */
  11. function smarty_function_assign($params, Smarty_Internal_Template $template)
  12. {
  13. if (empty($params['var'])) {
  14. trigger_error("assign: missing 'var' parameter");
  15. return;
  16. }
  17.  
  18. if (!in_array('value', array_keys($params))) {
  19. trigger_error("assign: missing 'value' parameter");
  20. return;
  21. }
  22.  
  23. $template->assign($params['var'], $params['value']);
  24.  
  25. }
  26. ?>
  27.  

参见: registerPlugin(), unregisterPlugin().

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