双引号中嵌入变量

  • Smarty可以识别出在双引号中嵌套的 变量,这些变量名称必须只包括 字母、数字和下划线。 参见命名规则

  • 另外,带有其他字符的,如点号(.)或者 $object->reference形式的变量, 必须用单引号括起来。

  • Smarty3中允许在双引号中嵌入Smarty的标签并运行。 如果你需要在双引号的变量上使用修饰器、插件或者PHP函数等,这是非常有用的。


Example 3.5. 例子

  1. {func var="test $foo test"} // 识别变量 $foo
  2. {func var="test $foo_bar test"} // 识别变量 $foo_bar
  3. {func var="test `$foo[0]` test"} // 识别变量 $foo[0]
  4. {func var="test `$foo[bar]` test"} // 识别变量 $foo[bar]
  5. {func var="test $foo.bar test"} // 识别变量 $foo (不是 $foo.bar)
  6. {func var="test `$foo.bar` test"} // 识别变量 $foo.bar
  7. {func var="test `$foo.bar` test"|escape} // 引号外的修饰器!
  8. {func var="test {$foo|escape} test"} // 引号内的修饰器!
  9. {func var="test {time()} test"} // PHP函数结果
  10. {func var="test {counter} test"} // 插件的结果
  11. {func var="variable foo is {if !$foo}not {/if} defined"} // Smarty区块函数
  12.  


Example 3.6. 例子

  1. {* 将使用$tpl_name的值 *}
  2. {include file="subdir/$tpl_name.tpl"}
  3.  
  4. {* 不使用$tpl_name的值 *}
  5. {include file='subdir/$tpl_name.tpl'} // 必须用双引号才能用变量值!
  6.  
  7. {* 当变量包含了点号“.”,必须用单引号括起来 *}
  8. {cycle values="one,two,`$smarty.config.myval`"}
  9.  
  10. {* 当变量包含了点号“.”,必须用单引号括起来 *}
  11. {include file="`$module.contact`.tpl"}
  12.  
  13. {* 点号后面跟着变量 *}
  14. {include file="`$module.$view`.tpl"}
  15.  

Note

虽然Smarty能处理比较复杂的表达式和语法,但是最好保持模板语法的简洁, 把关注的焦点放在显示层面。如果你发现模板语法非常复杂,那么 最好把这些逻辑代码转移到插件或者修饰器上,用PHP代码进行编写。

参见字符转换

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