【问题标题】:GTM, Prestashop and Smarty {literal}GTM、Prestashop 和 Smarty {字面}
【发布时间】:2017-01-19 18:02:24
【问题描述】:

我想在 Prestashop 的订单确认页面中为 GTM 添加一个数据层。 所以就像在 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 显示正常,但当然在 a 之外

&lt;script&gt;...&lt;/script&gt;...

感谢您的帮助,

知觉

【问题讨论】:

    标签: javascript smarty prestashop google-tag-manager


    【解决方案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}
    

    将 smarty 代码与 js 结合起来总是很棘手,在你的情况下,我不建议使用 {literal} 标签,试着告诉我;)

    【讨论】:

    • 感谢您的回答,我已经尝试过您的代码,但它不起作用... Smarty 让我抓狂>
    猜你喜欢
    • 2017-06-11
    • 1970-01-01
    • 2020-12-04
    • 2011-03-21
    • 2015-12-04
    • 2019-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多