2013-02-22 52 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