Skip to content

变量

模板变量以美元符号$开始。它们可以包含数字、字母和下划线,就像PHP 变量一样。你可以通过索引数字或非数字来引用数组。也可以引用对象的属性和方法。

配置文件变量是$美元语法的一个例外,它们被#哈希标记#包围,或者通过$smarty.config变量引用。

示例

{$foo}        <-- 显示一个简单的变量(非数组/对象)
{$foo[4]}     <-- 显示一个从零开始索引的数组的第5个元素
{$foo.bar}    <-- 显示数组的"bar"键值,类似于PHP $foo['bar']
{$foo.$bar}   <-- 显示数组的变量键值,类似于PHP $foo[$bar]
{$foo->bar}   <-- 显示对象属性"bar"
{$foo->bar()} <-- 显示对象方法"bar"的返回值
{#foo#}       <-- 显示配置文件变量"foo"
{$smarty.config.foo} <-- {#foo#}的同义词
{$foo[bar]}   <-- 只在section循环中有效的语法,参见 {section}
{assign var=foo value='baa'}{$foo} <--  显示 "baa", 参见 {assign}

许多其他组合是允许的

{$foo.bar.baz}
{$foo.$bar.$baz}
{$foo[4].baz}
{$foo[4].$baz}
{$foo.bar.baz[4]}
{$foo->bar($baz,2,$bar)} <-- 传递参数
{"foo"}       <-- 静态值是允许的

{* 显示服务器变量 "SERVER_NAME" ($_SERVER['SERVER_NAME'])*}
{$smarty.server.SERVER_NAME}

数学和嵌入标签:

{$x+$y}                             // 将输出 x 和 y 的和。
{assign var=foo value=$x+$y}        // 在属性中
{$foo[$x+3]}                        // 作为数组索引
{$foo={counter}+3}                  // 标签内的标签
{$foo="this is message {counter}"}  // 双引号字符串中的标签

定义数组:

{assign var=foo value=[1,2,3]}
{assign var=foo value=['y'=>'yellow','b'=>'blue']}
{assign var=foo value=[1,[9,8],3]}   // 可以嵌套

短变量赋值:

{$foo=$bar+2}
{$foo = strlen($bar)}               // 函数在赋值中
{$foo = myfunct( ($x+$y)*3 )}       // 作为函数参数
{$foo.bar=1}                        // 分配给特定数组元素
{$foo.bar.baz=1}
{$foo[]=1}                          // 追加到数组

Smarty "dot" 语法(注意:使用嵌入的 {} 来解决歧义):

{$foo.a.b.c}        =>  $foo['a']['b']['c']
{$foo.a.$b.c}       =>  $foo['a'][$b]['c']         // 带有变量索引
{$foo.a.{$b+4}.c}   =>  $foo['a'][$b+4]['c']       // 带有表达式的索引
{$foo.a.{$b.c}}     =>  $foo['a'][$b['c']]         // 带有嵌套索引

PHP风格的语法,替代 "dot" 语法:

{$foo[1]}             // 正常访问
{$foo['bar']}
{$foo['bar'][1]}
{$foo[$x+$x]}         // 索引可以包含任何表达式
{$foo[$bar[1]]}       // 嵌套索引
{$foo[section_name]}  // smarty {section} 访问,不是数组访问!

变量变量:

$foo                     // 正常变量
$foo_{$bar}              // 变量名包含其他变量
$foo_{$x+$y}             // 变量名包含表达式
$foo_{$bar}_buh_{$blar}  // 变量名有多个段
{$foo_{$x}}              // 如果 $x 的值为 1,将输出变量 $foo_1。

对象链:

{$object->method1($x)->method2($y)}

直接访问PHP函数:

{time()}

注意

尽管 Smarty 可以处理一些非常复杂的表达式和语法,但是一个好的经验法则是保持模板语法的最小化并专注于展示。如果你发现你的模板语法过于复杂,将不直接处理展示的部分移动到 PHP 通过插件或修饰符可能是个好主意。

请求变量如 $_GET$_SESSION 等可以通过保留的 $smarty 变量访问。

参见 $smarty, 配置变量 {assign}assign()