使用 Smarty 模板的时候,通常都是用 ‘{’ 和 ‘}’ 作为定界符(delimiter)。
有时,我们需要在 html 代码里输出大括号,如果在模板里直接写出来,会被 Smarty 的解析器认为是定界符,然后会报错:
Smarty error : syntax error: unrecognized tag
无法识别的标签!
如何解决呢?
1 内置变量
在需要使用定界符的时候,可以通过 {ldelim},{rdelim}标签,或者 {$smarty.ldelim},{$smarty.rdelim}的变量来使用。
2 文本转义
我们经常会在 html 里写 javascript 函数,就不可避免地写大量的大括号,这个时候上面的解决方法就不适用了,Smarty 提供了一个转义一段代码的标签:{literal}…{/literal}
{literal}
{/literal}
3 修改默认定界符
<?php
$smarty->left_delimiter = '<!--{';
$smarty->right_delimiter = '}-->';
$smarty->assign('foo', 'bar');
$smarty->assign('name', 'Albert');
$smarty->display('example.tpl');
?>
Smarty的默认定界符{ 和 }可以整齐地界定一般内容的显示。 然而你可以通过修改Smarty的 $left_delimiter 和 $right_delimiter 的变量值,设置更适合的定界符。
修改定界符会影响到全部模板代码和解析,请确保在修改前已清除了全部的缓存和编译文件。
4 加空格
在Smarty 3的模板中,如果‘{’和‘}’大括号里包含有空格,那么整个{}内容会被忽略,当然我们可以设置Smarty类变量$auto_literal=false来取消这种规则。【经测试,只要 { 后面有空格,就不会被解析】
参考:
Smarty 定界符 花括号 大括号 函数定义 转义
http://blog.csdn.net/sunlylorn/article/details/6319556
忽略Smarty解析
https://book.2cto.com/201305/22650.html
避免Smarty解析
https://www.smarty.net/docs/zh_CN/language.escaping.tpl
在php模板引擎smarty下输出大括号
http://blog.csdn.net/skfzc/article/details/48341375