Skip to content

变量修饰符

变量修饰符可以应用于变量自定义函数或字符串。要应用修饰符,需要在值后面加上 |(管道)和修饰符名称。修饰符可以接受影响其行为的额外参数。这些参数在修饰符名称后面,用 :(冒号)分隔开。此外,所有的 PHP 函数都可以隐式地用作修饰符(更多内容见下文),修饰符可以组合使用

示例

{* 对变量应用修饰符 *}
{$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 属性中声明为受信任的。有关详细信息,请参阅安全部分。

另请参阅registerPlugin()组合修饰符使用插件扩展 Smarty