Table of Contents
变量修饰器可以用于变量,
自定义函数或者字符串。
使用修饰器,需要在变量的后面加上|
(竖线)并且跟着修饰器名称。
修饰器可能还会有附加的参数以便达到效果。
参数会跟着修饰器名称,用:
(冒号)分开。
同时,默认全部PHP函数都可以作为修饰器来使用
(不止下面的),而且修饰器可以被
联合使用。
Example 5.1. 修饰器例子
{* apply modifier to a variable *} {$title|upper} {* modifier with parameters *} {$title|truncate:40:"..."} {* apply modifier to a function parameter *} {html_table loop=$myvar|upper} {* with parameters *} {html_table loop=$myvar|truncate:40:"..."} {* apply modifier to literal string *} {"foobar"|upper} {* using date_format to format the current date *} {$smarty.now|date_format:"%Y/%m/%d"} {* apply modifier to a custom function *} {mailto|upper address="smarty@example.com"} {* using php's str_repeat *} {"="|str_repeat:80} {* php's count *} {$myArray|@count} {* this will uppercase and truncate the whole array *} <select name="name_id"> {html_options output=$my_array|upper|truncate:20} </select>
修饰器可以作用于任何类型的变量,数组或者对象。
这是Smarty3的默认行为。在Smarty2.x,你需要在数组后加上"@
"
标识来使用修饰器,如{$articleTitle|@count}
。
在Smarty3,不再需要使用"@
",它会被忽略。
如果你想要在数组的每一项中都加上修饰器,你可以通过循环数组进行,或者可以 在修饰器函数中提供这个功能。
另外,在Smarty2.x,修饰器可以作用在数学表达式的结果上,如{8+2}
,
意味着{8+2|count_characters}
的结果是2,
因为8+2=10 而 10 是两个字符长度。
在Smarty3,修饰器将会作用在变量上,或者是在表达式计算前,所以因为 2 是一个字符长度,
所以{8+2|count_characters}
的结果是9.
如果希望出现原来的结果,可以使用括号,如{(8+2)|count_characters}
。
修饰器可以从$plugins_dir
目录中自动加载,或者通过registerPlugin()
来进行动态注册。
第二种方法在PHP代码和smarty模板间共享函数时很有用。
默认全部PHP函数都可以作为修饰器,正如上面例子演示的。 然而,使用php函数作为修饰器会存在两个小问题:
首先 - 有时函数参数的顺序并不太一致。如使用
{"%2.f"|sprintf:$foo}
来格式化$foo
是正确的。
但是更直观的做法,{$foo|string_format:"%2.f"}
是Smarty自身的函数。
其次 - 如果开启了安全限制,那么要使用php函数作为修饰器,就必须通过
$modifiers
属性来进行设置信任的函数。
参见安全机制的章节。
参见
registerPlugin()
,
修饰器组合.
和
Smarty扩展
使变量内容里的每个单词的第一个字母大写。
与PHP函数的
ucwords()
相似。
参数顺序 | 类型 | 必选参数 | 默认值 | 说明 |
---|---|---|---|---|
1 | boolean | No | FALSE |
带数字的单词是否也头字母大写。 |
2 | boolean | No | FALSE |
设置单词内其他字母是否小写,如"aAa" 变成 "Aaa"。 |
Example 5.2. capitalize
<?php $smarty->assign('articleTitle', 'next x-men film, x3, delayed.'); ?>
模板是:
{$articleTitle} {$articleTitle|capitalize} {$articleTitle|capitalize:true}
输出:
next x-men film, x3, delayed. Next X-Men Film, x3, Delayed. Next X-Men Film, X3, Delayed.