zoukankan      html  css  js  c++  java
  • 如何处理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}


     



    php是世界上最好的编程语言,没有之一
  • 相关阅读:
    云计算
    uc/xi
    互联网 2.0概念
    java连接数据库
    记录一下安装 mysql 的踩坑之路
    1
    Linux介绍与基本必知命令
    Web课程Linux命令统计
    7——条件判断、三目运算、条件循环、迭代循环
    6——散列类型、运算符优先级、逻辑运算
  • 原文地址:https://www.cnblogs.com/lookphp/p/5046256.html
Copyright © 2011-2022 走看看