smarty界定符与JS冲突的问题
发布于:2022-01-17 09:50:54
#1 SunPSP
方便跟习惯,我将smarty的界定符设置为{}
之前一直没发现问题
今天在模板中加入了JS,然后就报错了
貌似是写在模板中的JS函数界定符跟SMARTY的界定符冲突了
感觉这不应该啊,smarty这么多年了,可以说是久经考验了
怎么会有这个问题呢?而且记得以前也是用过的,貌似没这个问题啊
求解
附上错误提示:
Smarty Error: Syntax Error in template
"E:\SunP\WebServer\root\sunp/admin/template\index.html" on line 13
"$('ul.sp-nav-main li').click(function(){$(this).next(".sp-nav-sub").toggle();});"
- Unexpected "(", expected one of: "{" , "identifier"
2013-03-20 06:00:56
#2 jake
Smarty从早期就一直有解决这个问题。
解决方法手册有写
http://www.speedphp.com/smarty/language.escaping.html 在smarty2里面,就是通过手册里面写的方法,用literal来进行界定
不过在smarty3里面,比较先进了,如果大括号附近没有字符,那么就直接当作JS/CSS看,所以一般情况,不会有冲突。
这就是smarty3的$auto_literal的新配置。
http://www.speedphp.com/smarty/variable.auto.literal.html所以,这SpeedPHP里面,我们的例子,大部分都是用 <{}> 作为限定符
2013-03-20 07:14:34
#3 SunPSP
感谢J大,已解决
$(function(){
$('ul.sp-nav-sub').hide();
$('ul.sp-nav-main li').click(function()
{$(this).next(".sp-nav-sub").toggle();
});
})
因为句子够短第二对大括号未换行就报错
$(function(){
$('ul.sp-nav-sub').hide();
$('ul.sp-nav-main li').click(function()
{
$(this).next(".sp-nav-sub").toggle();
});
})
如此换行即可,SMARTY这是在教我要断行缩进不能偷懒?
悲催我还折腾N个小时没辙来这求助呢
2013-03-20 08:58:51
#4 jake
SunPSP 发表于 2013-3-20 08:58
感谢J大,已解决
$(function(){
$('ul.sp-nav-sub').hide();
应该不是,是因为smarty最早的时候,JS还不流行缩成一行来写。所以smarty就用了这种大括号的方式。
现在应该很少模板引擎会直接用大括号来做限定符了。
2013-03-20 09:10:04