2017-01-19 3 views
0

Я хочу добавить DataLayer для GTM на странице подтверждения заказа на Prestashop. Так как это точно в документации Smarty, я использую {literal}, {ldelim} и {rdelim}.GTM, Prestashop и Smarty {literal}

Мой сценарий должен быть динамическим для отправки правильных данных в GTM, в зависимости от команды, которую только что передал клиент.

Я изменяю файл header.tpl, так как мне нужно поставить JS перед тегом GTM.

Вот мой код:

{if isset($page_name) && $page_name|escape:'html':'UTF-8' == "order-confirmation"} 
    {literal} 
     <script> 
    {/literal} 
     window.dataLayer = window.dataLayer || [] 
     dataLayer.push({ldelim} 
      'transactionId': '{$id_order}', 
      'transactionTotal': {$total_paid_tax_incl}, 
      'transactionProducts': [ 
      {foreach from=$products item=product} 
       {ldelim}       // List of productFieldObjects. 
        'sku': '{$product.id}', 
        'name': '{$product.name}',  // Name or ID is required. 
        //'category': '{$product.X}', 
        'price': {$product.price}, 
        'quantity': 1      // Optional fields may be omitted or set to empty string. 
       {rdelim}{if !$smarty.foreach.product.last},{/if} 
      {/foreach} 
     ] 
     {rdelim}); 
    {literal} 
     </script> 
    {/literal} 
{/if} 

Результат не отображается ничего ... НО, если я удалю

{literal}<script>{/literal} 

и

{literal}</script>{/literal} 

часть, JS является отображающий штраф, но, конечно, за пределами

<script>...</script> ...

Спасибо за помощь,

Perceval

ответ

0

Я сделал для вас несколько небольших исправлений:

{if isset($page_name) && $page_name|escape:'html':'UTF-8' == "order-confirmation"} 
     <script type="text/javascript"> 
     window.dataLayer = window.dataLayer || [] 
     dataLayer.push({ldelim} 
      'transactionId': '{$id_order}', 
      'transactionTotal': {$total_paid_tax_incl}, 
      'transactionProducts': [ 
      {foreach from=$products item=product} 
       {ldelim}        
       // List of productFieldObjects. 
        'sku': '{$product.id}', 
        'name': '{$product.name}',  // Name or ID is required. 
        //'category': '{$product.X}', 
        'price': {$product.price}, 
        'quantity': 1      // Optional fields may be omitted or set to empty string. 
       {rdelim} 
       {if !$smarty.foreach.product.last},{/if} 
      {/foreach} 
     ] 
     {rdelim}); 
     </script> 
{/if} 

Это всегда сложно сетки вверх код Smarty с js, в вашем случае я не предлагаю использовать тег {literal}, попробуйте и дайте мне знать;)

+0

Спасибо за ваш ответ. попробовал ваш код, но он не работает ... Smarty заставляют меня сходить с ума><' – percypyan

+0

Да ... умный это не здорово ... Что не работает? – sarcom