如何处理JS与smarty标签的冲突
smarty的默认标记符是大括号:{},
假如我们页面上有JS且定义了函数或者对象,或者有CSS定义了样式,就会出现大括号,
smary引擎就会把这些大括号当作smarty语法来解释,
很明显,这些CSS样式属性和JS里的语法,不是smarty的语法,
smarty引擎就会报错。
解决办法一、修改smart默认定界符,在php中,修改smarty对象的$left_delimiter和$right_delimiter属性。
很多人喜欢改为<{和}>,也有人改为<!--{和}-->,这看个人喜欢了。
$smarty = new Smarty();
$smarty->left_delimiter = "<{";
$smarty->right_delimiter = "}>";
这样,就能很好地避免了冲突问题,但是缺点也很明显,
通用性和可读性。
你习惯了用<{,他习惯用<!--{,还可能有人习惯用{{;
如果带有<和>,想想在HTML标签里面需要使用的情况
<input type="checkbox" <!--{if $checked}--> checked=""<!--{/if}--> />
大家可以把这句放到DW里看看效果。
个人不是很赞同改定界符来解决这个冲突问题。
作为smarty的开发者,他们肯定懂HTML、CSS、JS的,他们肯定知道这个大括号会有冲突的,
所以,smarty本身肯定会有解决办的,那就是{literal}和{/literal}
将不想被smarty解释的HTML用{literal}和{/literal}包起来。
{literal}
<script type="text/javascript">
function myFun(){
}
</script>
{/literal}
如果我们需要将php变量传递给js,可以这样
<script type="text/javascript">
var chk = "{$checked}";
{literal}
function myFun(){
}
{/literal}
</script>
{literal}和{/literal}使用的位置,不需要强求在HTML里的“配对位置”,即可以这样:
<header>
<script type="text/javascript">
var chk = "{$checked}";
{literal}
function myFun(){
}
</script>
</header>
<body>
{/literal}
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· 《HelloGitHub》第 108 期
· 一个基于 .NET 开源免费的异地组网和内网穿透工具
· MQ 如何保证数据一致性?
· Windows桌面应用自动更新解决方案SharpUpdater5发布