Smarty 是什么?
使用它的理由
用例和工作流程
语法比较
模板继承
最佳实践
速成课程
有时,希望或甚至有必要让 Smarty 忽略它在其他情况下可能会解析的区域。一个经典的示例是将 JavaScript 或 CSS 代码嵌入在模板中。出现问题的原因是这些语言使用 { 和 } 字符,而这些字符也是 Smarty 的默认 分隔符。
避免转义的良好做法是将 JavaScript/CSS 分别存储在它们自己的文件中,并使用标准 HTML 方法来访问它们。这还将利用浏览器脚本缓存。当您需要将 Smarty 变量/函数嵌入到 JavaScript/CSS 中时,则适用以下内容。
在 Smarty 模板中,只要 { 和 } 大括号被空格包围,它们将被忽略。可以通过将 Smarty 类变量 $auto_literal 设置为 false 来禁用此行为。
示例 3.8 使用自动文本功能
<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 的 $left_delimiter 和 $right_delimiter 值来更改它们。
更改分隔符会影响所有模板语法和转义。如果您决定更改它们,请务必清除缓存和已编译文件。
示例 3.9 更改分隔符示例
<?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>