What is Smarty?
Why use it?
Use Cases and Work Flow
Syntax Comparison
Template Inheritance
Best Practices
Crash Course
You may use the Smarty logo according to the trademark notice.
For sponsorship, advertising, news or other inquiries, contact us at:
模板变量以美元符号$开头,由字母、数组和下划线组成,和 PHP variable相似。 变量可以引用数字索引或非数字索引的数组,对象的属性和方法等。
配置变量
是例外的,它不是以美元符号$开头,而是放到两个井号中间#hashmarks#,
或者通过
$smarty.config
来使用。
Example 3.2. 变量
{$foo} <-- 显示简单的变量 (非数组/对象) {$foo[4]} <-- 在0开始索引的数组中显示第五个元素 {$foo.bar} <-- 显示"bar"下标指向的数组值,等同于PHP的$foo['bar'] {$foo.$bar} <-- 显示以变量$bar值作为下标指向的数组值,等同于PHP的$foo[$bar] {$foo->bar} <-- 显示对象属性 "bar" {$foo->bar()} <-- 显示对象成员方法"bar"的返回 {#foo#} <-- 显示变量配置文件内的变量"foo" {$smarty.config.foo} <-- 等同于{#foo#} {$foo[bar]} <-- 仅在循环的语法内可用,见{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 点号语法: {$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的语法,另一种点号的语法: {$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
变量来进行获取。