GTM,Prestashop和Smarty {literal}

时间:2017-01-19 18:02:24

标签: javascript smarty prestashop google-tag-manager

我想在Prestashop的订单确认页面中为GTM添加dataLayer。 因此,就像在Smarty文档中一样,我使用{literal}{ldelim}{rdelim}

我的脚本需要是动态的,才能将正确的数据发送到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> ...

感谢您的帮助,

珀西瓦尔

1 个答案:

答案 0 :(得分:1)

我会为你做一些小修改:

{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}

将智能代码与js相结合总是很棘手,在你的情况下我不建议使用{literal}标签,试着让我知道;)