变量

模板变量以美元符号$开头,由字母、数组和下划线组成,和 PHP variable相似。 变量可以引用数字索引或非数字索引的数组,对象的属性和方法等。

配置变量 是例外的,它不是以美元符号$开头,而是放到两个井号中间#hashmarks#, 或者通过$smarty.config来使用。


Example 3.2. 变量

  1. {$foo} <-- 显示简单的变量 (非数组/对象)
  2. {$foo[4]} <-- 0开始索引的数组中显示第五个元素
  3. {$foo.bar} <-- 显示"bar"下标指向的数组值,等同于PHP$foo['bar']
  4. {$foo.$bar} <-- 显示以变量$bar值作为下标指向的数组值,等同于PHP$foo[$bar]
  5. {$foo->bar} <-- 显示对象属性 "bar"
  6. {$foo->bar()} <-- 显示对象成员方法"bar"的返回
  7. {#foo#} <-- 显示变量配置文件内的变量"foo"
  8. {$smarty.config.foo} <-- 等同于{#foo#}
  9. {$foo[bar]} <-- 仅在循环的语法内可用,见{section}
  10. {assign var=foo value='baa'}{$foo} <-- 显示"baa", 见{assign}
  11.  
  12. 更多合成变量的方式:
  13.  
  14. {$foo.bar.baz}
  15. {$foo.$bar.$baz}
  16. {$foo[4].baz}
  17. {$foo[4].$baz}
  18. {$foo.bar.baz[4]}
  19. {$foo->bar($baz,2,$bar)} <-- 传递参数
  20. {"foo"} <-- 静态值
  21.  
  22. {* 显示服务器的环境变量"SERVER_NAME" ($_SERVER['SERVER_NAME'])*}
  23. {$smarty.server.SERVER_NAME}
  24.  
  25. 数学运算和嵌入标签:
  26.  
  27. {$x+$y} // 显示x加y的和
  28. {assign var=foo value=$x+$y} // 和用于赋值
  29. {$foo[$x+3]} // 作为下标使用
  30. {$foo={counter}+3} // 标签内的标签
  31. {$foo="this is message {counter}"} // 在双引号内的标签
  32.  
  33. 定义数组:
  34.  
  35. {assign var=foo value=[1,2,3]}
  36. {assign var=foo value=['y'=>'yellow','b'=>'blue']}
  37. {assign var=foo value=[1,[9,8],3]} // 可嵌套
  38.  
  39. 缩写方式:
  40.  
  41. {$foo=$bar+2}
  42. {$foo = strlen($bar)} // 函数赋值
  43. {$foo = myfunct( ($x+$y)*3 )} // 函数参数
  44. {$foo.bar=1} // 赋值给特定的数组元素
  45. {$foo.bar.baz=1}
  46. {$foo[]=1} // 附加到数组
  47.  
  48. Smarty 点号语法:
  49.  
  50. {$foo.a.b.c} => $foo['a']['b']['c']
  51. {$foo.a.$b.c} => $foo['a'][$b]['c'] // 变量下标
  52. {$foo.a.{$b+4}.c} => $foo['a'][$b+4]['c'] // 表达式下标
  53. {$foo.a.{$b.c}} => $foo['a'][$b['c']] // 嵌套下标
  54.  
  55. 类似PHP的语法,另一种点号的语法:
  56.  
  57. {$foo[1]} // 一般的
  58. {$foo['bar']}
  59. {$foo['bar'][1]}
  60. {$foo[$x+$x]} // 下标可以是各种表达式
  61. {$foo[$bar[1]]} // 嵌套下标
  62. {$foo[section_name]} // smarty {section} 存取, 非数组存取!
  63.  
  64. 变量构造变量:
  65.  
  66. $foo // 一般的变量
  67. $foo_{$bar} // 变量名包含了其他变量
  68. $foo_{$x+$y} // 变量名包含了表达式
  69. $foo_{$bar}_buh_{$blar} // 更复杂的
  70. {$foo_{$x}} // 如$x = 1,那么将显示$foo_1的值
  71.  
  72. 对象链:
  73.  
  74. {$object->method1($x)->method2($y)}
  75.  
  76. PHP函数直接使用:
  77.  
  78. {time()}
  79.  
  80.  

Note

虽然Smarty可以处理很复杂的表达式和语法,但是最好的方式还是 保持模板语法的简洁,模板层专注于显示。 如果发现你的模板语法过于复杂,那么建议是将这些逻辑代码写到PHP里, 然后在模板中通过插件或者修饰器来调用。

服务器请求的变量,如$GET, $_SESSION也可以通过[$smarty_]($17.md)变量来进行获取。

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

原文: https://www.smarty.net/docs/zh_CN/language.syntax.variables.tpl