变量修饰符
变量修饰符可以应用于变量、自定义函数或字符串。要应用修饰符,需要在值后面加上 |(管道)和修饰符名称。修饰符可以接受影响其行为的额外参数。这些参数在修饰符名称后面,用 :(冒号)分隔开。此外,所有的 PHP 函数都可以隐式地用作修饰符(更多内容见下文),修饰符可以组合使用。
- capitalize
- cat
- count_characters
- count_paragraphs
- count_sentences
- count_words
- date_format
- default
- escape
- from_charset
- indent
- lower
- nl2br
- regex_replace
- replace
- spacify
- string_format
- strip
- strip_tags
- to_charset
- truncate
- unescape
- upper
- wordwrap
示例
{* 对变量应用修饰符 *}
{$title|upper}
{* 带参数的修饰符 *}
{$title|truncate:40:"..."}
{* 对函数参数应用修饰符 *}
{html_table loop=$myvar|upper}
{* 带参数的修饰符 *}
{html_table loop=$myvar|truncate:40:"..."}
{* 对字符串字面量应用修饰符 *}
{"foobar"|upper}
{* 使用 date_format 格式化当前日期 *}
{$smarty.now|date_format:"%Y/%m/%d"}
{* 对自定义函数应用修饰符 *}
{mailto|upper address="smarty@example.com"}
{* 使用 php 的 str_repeat *}
{"="|str_repeat:80}
{* php 的 count *}
{$myArray|@count}
{* 这将对整个数组进行大写和截断处理 *}
<select name="name_id">
{html_options output=$my_array|upper|truncate:20}
</select>
- 修饰符可以应用于任何类型的变量,包括数组和对象。
注意
在 Smarty 3 中,默认行为已更改。在 Smarty 2.x 中,您必须使用 "
@" 符号来对数组应用修饰符,例如{$articleTitle|@count}。在 Smarty 3 中,不再需要 "@",并且会被忽略。如果要将修饰符应用于数组的每个单独项,您将需要在模板中循环数组,或在修饰符函数内提供此功能。
注意
其次,在 Smarty 2.x 中,修饰符应用于类似
{8+2}的数学表达式的结果,这意味着{8+2|count_characters}将给出2,因为 8+2=10,10 是两个字符长。在 Smarty 3 中,修饰符应用于变量或原子表达式之前执行计算,因此由于 2 是一个字符长,{8+2|count_characters}给出的结果是 9。要获得旧的结果,请使用括号,例如{(8+2)|count_characters}。
-
修饰符会自动从
$plugins_dir中加载,也可以使用registerPlugin()函数显式注册。后者对于在 php 脚本和 Smarty 模板之间共享函数非常有用。 -
所有的 PHP 函数都可以隐式地用作修饰符,就像上面的示例中演示的那样。然而,使用 PHP 函数作为修饰符有两个小陷阱:
-
首先,有时函数参数的顺序不是期望的顺序。使用
{"%2.f"|sprintf:$foo}格式化$foo实际上是可行的,但更直观的方式是使用 Smarty 分发的{$foo|string_format:"%2.f"}。 -
其次,如果启用了安全模式,所有要用作修饰符的 PHP 函数都必须在安全策略的
$modifiers属性中声明为受信任的。有关详细信息,请参阅安全部分。