替代动态JavaScript的Smarty {literal}标签

时间:2013-02-22 17:06:31

标签: php javascript smarty analytics smarty2

我有以下Smarty模板,该模板以“整体显示,生成一些JavaScript。”

正如您所看到的那样,我在整个代码段中打开了{literal}并关闭了{/literal}个标记,这看起来有些混乱和不守规矩。是否有更好的方法来编写这个代码,如果将来必须更改代码,它将显得更整洁,更易于管理?

{literal}
<script type="text/javascript">
var _roi = _roi || [];

// Base Order Details 
_roi.push(['_setMerchantId', '{/literal}{$merchant_id}{literal}']); 
_roi.push(['_setOrderId', '{/literal}{$order_id}{literal}']);
_roi.push(['_setOrderAmount', '{/literal}{$order_total}{literal}']);
_roi.push(['_setOrderNotes', '{/literal}{$order_notes}{literal}']);

// Line Items
{/literal}
{foreach from=$line_items item=line name=items}
    {literal}
    _roi.push(['_addItem', 
    '{/literal}{$line.sku}{literal}',
    '{/literal}{$line.title}{literal}',
    '{/literal}{$line.category_id}{literal}',
    '{/literal}{$line.category}{literal}',
    '{/literal}{$line.price}{literal}',
    '{/literal}{$line.quantity}{literal}'
    ]);
    {/literal}
{/foreach}
{literal}

// Submit Transaction to SDC ROI tracker
_roi.push(['_trackTrans']);
</script>
<script type="text/javascript" src="{/literal}{$url}{literal}"></script>{/literal}

3 个答案:

答案 0 :(得分:8)

如果您在javascript代码中使用大括号{和},则只需要{literal}标记。从我看到的,你不会使用任何这些,所以我猜你的代码也会在没有任何{literal}标签的情况下播放。 即使您使用了几个大括号,也可以在其位置使用{ldelim}和{rdelim},如果这样可以节省一些标签(并获得可读性)

(以上适用于smarty 2)

答案 1 :(得分:3)

您可以使用$auto_literal设置(默认情况下启用),并确保JavaScript代码中的任何花括号都被空格包围(通常应该是这样)。然后{literal}不再需要了。

  

在Smarty模板中,{和}大括号将被忽略   他们被白色的空间所包围。

答案 2 :(得分:0)

将{ldelim}用于{和{rdelim} for}

更新:根据以下评论

{literal}{{/literal} and {literal}}{/literal}

将被

取代
{ldelim} {rdelim}

然而periklis对原始帖子中的代码有正确的答案。但是要回答javascript中{literal}的替代问题。在Smarty中构建json的示例。

{capture assign="row"}{foreach from=$list item=item}
  {ldelim}key1:'{$item['key1val']}',key2:'{$item['key2val']}'{rdelim},
{/foreach}{/capture}
var jsonList = [ {row|trim:','} ];