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>