什么是 Smarty?
为什么使用它?
用例和工作流
语法比较
模板继承
最佳实践
速成课程
registerPlugin() — 动态注册插件
void registerPlugin(string 类型,
string 名称,
mixed 回调,
bool 可缓存,
mixed cache_attrs);
此方法注册在你的脚本中定义的功能或方法作为插件。它使用以下参数
类型
定义插件类型。有效值包括“函数”、“块”、“编译器”和“修饰符”。
名称
定义插件名称。
回调
定义 PHP 回调。此回调可以是以下内容
包含函数名称
的字符串
形式为 array($object, $method)
的数组,其中 $object
是对对象的引用,而 $method
是包含方法名称的字符串。
形式为 array($class, $method)
的数组,其中 $class
是类名,而 $method
是类的某个方法。
可缓存
和 cache_attrs
在大多数情况下都可以忽略。请参阅控制插件输出的可缓存性来了解如何正确使用它们。
示例 14.39 注册函数插件
<?php $smarty->registerPlugin("function","date_now", "print_current_date"); function print_current_date($params, $smarty) { if(empty($params["format"])) { $format = "%b %e, %Y"; } else { $format = $params["format"]; } return strftime($format,time()); } ?>
在模板中
{date_now} {* or to format differently *} {date_now format="%Y/%m/%d"}
示例 14.40 注册块函数插件
<?php // function declaration function do_translation ($params, $content, $smarty, &$repeat, $template) { if (isset($content)) { $lang = $params["lang"]; // do some translation with $content return $translation; } } // register with smarty $smarty->registerPlugin("block","translate", "do_translation"); ?>
其中模板是
{translate lang="br"}Hello, world!{/translate}
示例 14.41 注册修饰符插件
<?php // let's map PHP's stripslashes function to a Smarty modifier. $smarty->registerPlugin("modifier","ss", "stripslashes"); ?>
在模板中,使用 ss
删除反斜杠。
<?php {$var|ss} ?>
另请参见 unregisterPlugin()
、插件函数、插件 block 函数、插件编译器函数以及创建插件修改器部分。