2013-02-22 50 views
4

我有以下Smarty模板,它的整体显示它会生成一些JavaScript。替代Smarty动态JavaScript的{literal}标签

正如你所看到的,我开放{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} 
+0

退房[liuchangjohn的评论](http://www.smarty.net/forums/viewtopic.php?t=150)上使用Smarty的前置过滤器,以生成脚本标记。总体而言,语法更清晰。 – Mathletics 2013-02-22 17:13:33

+1

@Mathletics从那时起已经过去了几年,这种黑客应该不再需要了。 – 2013-02-23 22:29:29

回答

8

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

(以上适用于smarty 2 )

+0

谢谢,基本上他们不再需要了。优秀。 – crmpicco 2013-02-25 14:46:19

3

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

在Smarty模板中,{和}括号会被忽略,只要 它们被空白包围。

0

使用{ldelim}的{和{rdelim}为}

UPDATE:每低于这个

{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:','} ]; 
+0

请解释它为什么可行 – 2015-10-22 04:49:29