我想在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>
...
感谢您的帮助,
珀西瓦尔
答案 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}
标签,试着让我知道;)