在双引号中嵌入变量
-
对于任何其他字符,例如一个句点(.)或
$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。