转义 Smarty 解析
有时需要或必须让 Smarty 忽略它原本会解析的段落。一个典型的例子是在模板中嵌入 Javascript 或 CSS 代码。问题在于这些语言使用了 { 和 } 字符,这些字符同时也是 Smarty 的默认分隔符。
注意
避免转义的好方法是将 Javascript/CSS 分别放到自己的文件中并使用标准 HTML 方法来访问它们。这还能利用浏览器脚本缓存。当需要将 Smarty 变量/函数嵌入到 Javascript/CSS 中时,需要执行以下操作。
在 Smarty 模板中,只要 { 和 } 花括号被空格包围,它们将被忽略。可以通过设置 Smarty 类变量$auto_literal
为 false 来禁用此行为。
示例
<script>
// the following braces are ignored by Smarty
// since they are surrounded by whitespace
function foobar {
alert('foobar!');
}
// this one will need literal escapement
{literal}
function bazzy {alert('foobar!');}
{/literal}
</script>
{literal}..{/literal}
块用于转义模板逻辑块。还可以使用{ldelim}
、{rdelim}
标记或{$smarty.ldelim}
、{$smarty.rdelim}
变量逐个转义花括号。
Smarty 的默认分隔符 { 和 } 清晰地表示演示内容。然而,如果另一组分隔符更能满足您的需要,则可以使用 Smarty 的 setLeftDelimiter()
和 setRightDelimiter()
方法来更改它们。
注意
更改分隔符会影响所有模板语法和转义。如果您决定更改它们,请务必清除缓存和已编译文件。
<?php
$smarty->setLeftDelimiter('<!--{');
$smarty->setRightDelimiter('}-->');
$smarty->assign('foo', 'bar');
$smarty->assign('name', 'Albert');
$smarty->display('example.tpl');
模板所在的位置