Skip to content

在双引号中嵌入变量

  • 只要变量名只包含数字、字母和下划线,Smarty 就会识别嵌入在"双引号"中的赋值变量。更多细节请参见命名

  • 对于任何其他字符,例如一个句点(.)或$object->reference,那么变量必须被`反引号`包围。

  • 另外,Smarty 确实允许在双引号字符串中嵌入 Smarty 标签。如果你想包含带有修饰符、插件或 PHP 函数结果的变量,这会很有用。

示例

{func var="test $foo test"}              // 能识别 $foo
{func var="test $foo_bar test"}          // 能识别 $foo_bar
{func var="test `$foo[0]` test"}         // 能识别 $foo[0]
{func var="test `$foo[bar]` test"}       // 能识别 $foo[bar]
{func var="test $foo.bar test"}          // 能识别 $foo (不是 $foo.bar)
{func var="test `$foo.bar` test"}        // 能识别 $foo.bar
{func var="test `$foo.bar` test"|escape} // 修饰符在引号外面!
{func var="test {$foo|escape} test"}     // 修饰符在引号里面!
{func var="test {time()} test"}          // PHP函数结果
{func var="test {counter} test"}         // 插件结果
{func var="variable foo is {if !$foo}not {/if} defined"} // Smarty块函数

{* 将 $tpl_name 替换为值 *}
{include file="subdir/$tpl_name.tpl"}

{* 不替换 $tpl_name *}
{include file='subdir/$tpl_name.tpl'} // 变量需要双引号!

{* 必须使用反引号,因为它包含一个点 "." *}
{cycle values="one,two,`$smarty.config.myval`"}

{* 必须使用反引号,因为它包含一个点 "." *}
{include file="`$module.contact`.tpl"}

{* 可以使用点语法的变量 *}
{include file="`$module.$view`.tpl"}

注意

虽然 Smarty 可以处理一些非常复杂的表达式和语法,但一个好的经验法则是保持模板语法的简洁,并专注于呈现。如果你发现你的模板语法变得过于复杂,将那些不直接处理呈现的部分移动到 PHP 的插件或修饰符中可能是个好主意。

另请参见escape