Smarty 是什么?
为什么要使用它?
使用用例和工作流程
语法比较
模板继承
最佳实践
速成课程
目录
变量修饰符可应用于 变量、自定义函数 或字符串。要应用修饰符,请指定值,后跟 |
(管道)和修饰符名称。修饰符可能接受影响其行为的其他参数。这些参数位于修饰符名称之后,并用 :
(冒号)分隔。此外,所有 php 函数都可以隐式用作修饰符(见下方)并且修饰符可以 组合。
示例 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="[email protected]"} {* 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>
修饰符可应用于任何类型的变量,包括数组和对象。
Smarty 3 更改了默认行为。在 Smarty 2.x 中,您必须使用 "@
" 符号才能向数组应用修饰符,例如 {$articleTitle|@count}
。使用 Smarty 3 时,不再需要 "@
",并且将忽略该符号。
如果您想让修饰符应用于数组中的每个单独项,您将需要在模板中循环数组,或在修饰符函数中提供此功能。
其次,在 Smarty 2.x 中,修改器应用于 math 表达式的结果,如 {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
$plugins_dir
自动加载,也可以通过 registerPlugin()
函数显式注册。后者适合在 PHP 脚本和 Smarty 模板之间共享一个函数。
所有 PHP 函数都可以作为修改器隐式使用,如上面示例中的演示。然而,将 PHP 函数用作修改器有两个小缺点
第一——有时函数参数的顺序不是理想的。用 {"%2.f"|sprintf:$foo}
对 $foo
进行格式化实际上是可以工作的,但需要更加直观,如 {$foo|string_format:"%2.f"}
由 Smarty 分发提供。
第二——如果启用了安全性,所有用作修改器的 PHP 函数都必须在安全性策略的 $modifiers
属性中声明为受信任的。有关详细信息,请参阅 Security 部分。
另请参阅 registerPlugin()
、组合修改器 和 使用插件扩展 Smarty
这用于使变量中所有单词的首字母大写。这类似于 PHP ucwords()
函数。
参数位置 | 类型 | 是否必需 | 默认 | 描述 |
---|---|---|---|---|
1 | 布尔值 | 否 | FALSE |
这决定是否将包含数字的单词大写 |
2 | 布尔值 | 否 | FALSE |
这决定是否将单词中的大写字母小写,例如,“aAa”变为“Aaa” |
示例 5.2 大写
<?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.