<忽略smarty解析>
有时候可能有一段代码你需要让smarty忽略其解析,直接输出. 类似javascript 和css 中的代码. 但是它们使用的 { } 会与smarty delimiters [定界符] 有冲突.
注意:最好的避免解析是方法分离你的js和css到单独的文件,然后使用html标签引入其文件内容. 这也更有利于浏览器缓存. 如果你想运用smarty变量或函数到Js或者css中,可以使用如下方法.
在 Smarty 模板中, 定界符 { 和 } 如果两边({的右边和}的左边)存在空白(包括空格和换行),那么本身将不会以smarty定界符的形式解析. 当然你可以通过设置 $auto_literal 使其取消默认行为.
注意:即使你把定界符改成了别的,默认情况下两边仍然不能有空白。如果你的定界符是<{}>,那么默认情况下<{ include file="a.tpl" }>会直接输出。
例:使用自动忽略功能
<script>
// 以下内容将直接输出,因为大括号两边存在空白
function foobar {
alert('foobar!');
}
// 以下需要使用 literal 标记才能正常输出,因为大括号两边没有空白
{literal}
function bazzy {alert('foobar!');}
{/literal}
</script>
{literal}..{/literal} 块里的模板标记将自动被忽略.
或者,不用自动忽略或{literal}块,你也可以使用 {ldelim} 标记来输出左定界符(默认是{), {rdelim} 输出右定界符。使用 {$smarty.ldelim} , {$smarty.rdelim} 变量也有同样的效果.
例:
<script>function bazzy{ldelim}alert('foobar!');{rdelim}</script>
输出<script>function bazzy{alert('foobar!');}</script>
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>