2013-02-22 3 views
4

У меня есть следующий шаблон Smarty, который показан в его полном виде, который генерирует некоторый JavaScript.альтернатива тэгам Smarty {literal} для динамического 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} 
+0

Заканчивать [комментарий liuchangjohn в] (http://www.smarty.net/forums/viewtopic.php?t=150) на использование Smarty предфильтра для создания тегов сценариев. Более чистый синтаксис, в целом. – Mathletics

+1

@ Mathletics прошло уже несколько лет, этот хак больше не нужен. –

ответ

8

Тебе нужны только теги {literal}, если вы используете фигурные скобки {и} в вашем javascript-коде. Из того, что я вижу, вы не используете ни одно из них, поэтому я думаю, что ваш код будет играть без каких-либо тегов {literal}. Даже если вы должны были использовать пару фигурных скобок, вы могли бы использовать {ldelim} и {rdelim} вместо них, если это сэкономит вам некоторые метки (и повысит удобочитаемость)

(Вышеупомянутые требования применимы к smarty 2)

+0

Спасибо, по сути, они больше не нужны. Отлично. – crmpicco

3

Вы можете использовать настройку $auto_literal (включен по умолчанию) и убедитесь, что любые фигурные скобки в вашем JavaScript-коде окружены пробелами (которые они обычно должны быть). Тогда {literal} больше не понадобится.

В шаблонах Smarty скобки {и} будут игнорироваться до тех пор, пока они будут окружены пробелами.

0

Использование {ldelim} для {и {rdelim} для}

UPDATE: На комментариях ниже этой

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

будет заменен

{ldelim} {rdelim} 

Однако Periklis имеет правильный ответ на код в исходном посте. Но чтобы ответить на вопрос об альтернативах {literal} в javascript. Пример построения json в Smarty.

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

Пожалуйста, объясните, почему это работает –

Смежные вопросы