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

    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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值