转义 Smarty 解析
有时候,我们希望或者需要让 Smarty 忽略它通常会解析的部分。一个经典的例子是在模板中嵌入 Javascript 或 CSS 代码。问题在于这些语言使用的 { 和 } 字符也是 Smarty 的默认定界符。
注意
避免转义的一个好的实践是将你的 Javascript/CSS 分离到它们自己的文件中,并使用标准的 HTML 方法来访问它们。这也会利用浏览器脚本缓存。当你需要将 Smarty 变量/函数嵌入到你的 Javascript/CSS 中时,下面的内容就适用了。
在 Smarty 模板中,只要 { 和 } 两侧有空白,Smarty 就会忽略它们。这种行为可以通过将 Smarty 类变量 $auto_literal 设置为 false 来禁用。
示例
<script>
// 以下的大括号被Smarty忽略
// 因为它们被空白包围
function foobar {
alert('foobar!');
}
// 这个需要字面转义
{literal}
function bazzy {alert('foobar!');}
{/literal}
</script>
{literal}..{/literal} 块用于转义模板逻辑的块。你也可以用 {ldelim}, {rdelim} 标签或 {$smarty.ldelim},{$smarty.rdelim} 变量单独转义大括号。
Smarty 的默认定界符 { 和 } 干净地表示了呈现内容。然而,如果其他的定界符更符合你的需求,你可以用 Smarty 的 $left_delimiter 和 $right_delimiter 值来改变它们。
注意
改变定界符会影响所有的模板语法和转义。如果你决定改变它们,一定要清除缓存和编译文件。
<?php
$smarty->left_delimiter = '<!--{';
$smarty->right_delimiter = '}-->';
$smarty->assign('foo', 'bar');
$smarty->assign('name', 'Albert');
$smarty->display('example.tpl');
其中模板是:
Welcome <!--{$name}--> to Smarty
<script language="javascript">
var foo = <!--{$foo}-->;
function dosomething() {
alert("foo is " + foo);
}
dosomething();
</script>