您的位置:首页 > Web前端 > JavaScript

如何处理JS与smarty标签的冲突

2015-12-14 19:33 531 查看
smarty的默认标记符是大括号:{},

假如我们页面上有JS且定义了函数或者对象,或者有CSS定义了样式,就会出现大括号,

smary引擎就会把这些大括号当作smarty语法来解释,

很明显,这些CSS样式属性和JS里的语法,不是smarty的语法,

smarty引擎就会报错。

解决办法一、修改smart默认定界符,在php中,修改smarty对象的$left_delimiter和$right_delimiter属性。

很多人喜欢改为<{和}>,也有人改为<!--{和}-->,这看个人喜欢了。

$smarty=newSmarty();

$smarty->left_delimiter="<{";

$smarty->right_delimiter="}>";

这样,就能很好地避免了冲突问题,但是缺点也很明显,

通用性和可读性。

你习惯了用<{,他习惯用<!--{,还可能有人习惯用{{;

如果带有<和>,想想在HTML标签里面需要使用的情况

<inputtype="checkbox"<!--{if$checked}-->checked=""<!--{/if}-->/>

大家可以把这句放到DW里看看效果。





个人不是很赞同改定界符来解决这个冲突问题。

作为smarty的开发者,他们肯定懂HTML、CSS、JS的,他们肯定知道这个大括号会有冲突的,

所以,smarty本身肯定会有解决办的,那就是{literal}和{/literal}

将不想被smarty解释的HTML用{literal}和{/literal}包起来。

{literal}
<scripttype="text/javascript">
functionmyFun(){
}
</script>
{/literal}


如果我们需要将php变量传递给js,可以这样

<scripttype="text/javascript">
varchk="{$checked}";
{literal}
functionmyFun(){
}
{/literal}
</script>


{literal}和{/literal}使用的位置,不需要强求在HTML里的“配对位置”,即可以这样:

<header>
<scripttype="text/javascript">
varchk="{$checked}";
{literal}
functionmyFun(){
}
</script>
</header>
<body>
{/literal}


来源:<http://www.5dphp.com/art_56.html>

来自为知笔记(Wiz)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: