Smarty 模板定界符的另一种用法

来源:互联网 发布:绝地求生老是网络延迟 编辑:程序博客网 时间:2024/06/06 01:23

    Smarty 模板定界符默认是{...}。但在模板内包含 Javascript 脚本,并且用到了必须用{}包裹是js语句块的情况下,Smarty 模板默认的定界符就与 js 脚本的 {} 冲突了。一般的解决办法是两种。

    第一,用 Smarty 的 {literal}{/literal}标签包含 js 脚本,例如:
    {literal}
      <script>
        function func()
        {
          ......
        }
      </script>
    {/literal}

    第二,修改 Smarty 默认的定界符,例如以下语句修改默认的定界符为 {* ... *}
    $smarty->left_delimiter = '{*';
    $smarty->right_delimiter = '*}';

    但是有一种情况,就不能通过加{literal}{/literal}标签来解决,例如以下js代码:
      {literal}
      <script>
        function func()
        {
          if (null=={$data})
        }
      </script>
      {/literal}
    其中 {$data} 是一个 Smarty 变量,如果用{literal}{/literal}标签包裹,就把里面的 Smarty 变量 {$data}也屏蔽掉了。这个时候可以通过修改 Smarty 默认的定界符来解决,但是如果已经有大量的模板文件,再重新指定新的定界符工作量就太大了。这个时候,可以把 js 脚本里的“{”和“}”分别用 Smarty 的 {ldelim}和{rdelim}标签代替就可以了(切记不能同时还用literal了)。示例:
      <script>
        function func()
        {ldelim}
          if (null=={$data})
        {rdelim}
      </script>
    其实也有缺点,如果 js 脚本行数很多,有很多的“{...}”花括弧对,变通后的 js 脚本可读性就差了。

 

    作者:张庆(网眼)
    更多文章:http://blog.why100000.com
    2008-10-20

原创粉丝点击