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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值