4

JavaScript を生成する、全体が示されている次の Smarty テンプレートがあります。

ご覧のとおり、このコード スニペット全体でタグを開い{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}
4

3 に答える 3

8

JavaScript コードで中かっこ { と } を使用している場合は、{literal} タグのみが必要です。私が見たところ、あなたはこれらのいずれも使用していないので、あなたのコードは {literal} タグがなくても同様に再生されると思います。いくつかの中かっこを使用する場合でも、{ldelim} と {rdelim} を代わりに使用できます。これにより、いくつかのタグを節約できます (そして読みやすくなります)。

(上記はsmarty 2に適用)

于 2013-02-22T20:04:25.350 に答える
3

この$auto_literal設定 (デフォルトで有効) を利用して、JavaScript コード内の中括弧が空白で囲まれていることを確認できます (通常はそうあるべきです)。それなら{literal}もう必要ありません。

Smarty テンプレートでは、中括弧 { と } は空白で囲まれている限り無視されます。

于 2013-02-23T14:53:54.993 に答える
0

{ には {ldelim} を、} には {rdelim} を使用します。

更新:この下のコメントによると

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

に置き換えられます

{ldelim} {rdelim}

ただし、ペリクリスは元の投稿のコードに対する正しい答えを持っています。しかし、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:','} ];
于 2015-10-21T14:43:35.440 に答える