将多个产品列表放入 php 数据层
List of multiple products into php datalayer
我想在 "order confirmation page"(感谢您购买页面)中为我网站的营销像素获得一个很好的数据层跟踪。
该网站使用 OXID Shop 作为电子商务平台。
我想要以下设置:
IF currentPage == 'thankyou':
products_info = '[{id: 'product_id_1', price: 'price_1', quantity: 'quantity_1'},
{id: 'product_id_2', price: 'price_2', quantity: 'quantity_2'}]'
如果我的页面变量 "CurrentController"='thankyou',我正在尝试使用以下代码直接从后端获取值,我可以轻松地为仅包含一个值的变量执行此操作文章.
示例:
[{if $currentControllerName == "thankyou"}]
var dataLayer = [];
[{assign var="order" value=$oView->getOrder()}]
dataLayer.push(
{email: [{$order->oxorder__oxbillemail->value}]}
);
[{/if}]
问题是当我需要获取不止一篇文章的值时,就像我在开头提到的 products_info 变量一样。
我正在尝试以下代码,但我不确定如何制作迭代器 "append" 或将每个产品值发送到一个变量:
[{if $currentControllerName == "thankyou"}]
var dataLayer = [];
[{assign var="order" value=$oView->getOrder()}]
(
[{foreach from=$orderArticles item="currOrderArticle"}]
[{assign var="currArticle" value=$currOrderArticle->getArticle()}]
[{assign var="currBasePrice" value=$currOrderArticle->getBasePrice()}]
product_info: [{id: [{$currOrderArticle->oxorderarticles__oxartnum->value}],
price: [{$currBasePrice->getBruttoPrice()}],
quantity: [{$currOrderArticle->oxorderarticles__oxamount->value}]}]
[{/foreach}]
)
[{/if}]
您调用的 Javascript 函数 .push() 会在您每次调用它时将一个项目附加到您的 dataLayer 数组。 (参见 docs)
那么为什么不让 smarty 为购物篮中的每个产品呈现对该函数的调用。
[{if $oView->getClassName() == "thankyou"}]
<script>
var dataLayer = [];
[{assign var="basket" value=$oView->getBasket()}]
[{foreach from=$basket->getContents() item=basketitem}]
[{assign var=itemarticle value=$basketitem->getArticle()}]
[{assign var="basketitemprice" value=$basketitem->getPrice()}]
dataLayer.push({ id: [{$itemarticle->oxarticles__oxartnum->value}], price: [{$basketitemprice->getBruttoPrice()}], quantity: [{$basketitem->getAmount()}] });
[{/foreach}]
</script>
[{/if}]
这会将您的产品添加到您的 Javascript dataLayer
数组中。
值得注意的是,以下内容也应该有效:(可能 break 在不受支持的 IE 版本中)
[{if $oView->getClassName() == "thankyou"}]
<script>
var dataLayer = [
[{assign var="basket" value=$oView->getBasket()}]
[{foreach from=$basket->getContents() item=basketitem}]
[{assign var=itemarticle value=$basketitem->getArticle()}]
[{assign var="basketitemprice" value=$basketitem->getPrice()}]
{ id: [{$itemarticle->oxarticles__oxartnum->value}], price: [{$basketitemprice->getBruttoPrice()}], quantity: [{$basketitem->getAmount()}] },
[{/foreach}]
];
</script>
[{/if}]
最后你要做的是创建一个 Javascript 数组(可以被 Google 标签管理器读取)。这是 Thankyou 页面上的最终输出(并且完全有效 Javascript):
<script>
var dataLayer = [];
dataLayer.push({ id: 3788, price: 24.95, quantity: 1 });
dataLayer.push({ id: 1401, price: 129, quantity: 1 });
dataLayer.push({ id: 10101, price: 0, quantity: 1 });
</script>
请注意,您没有使用 PHP 将数据附加到 dataLayer 变量。您正在创建 Javascript 代码(使用 Smarty/PHP),然后将创建 dataLayer 数组(然后可以由 Google 标签管理器 Javascript 使用)
我想在 "order confirmation page"(感谢您购买页面)中为我网站的营销像素获得一个很好的数据层跟踪。 该网站使用 OXID Shop 作为电子商务平台。
我想要以下设置:
IF currentPage == 'thankyou':
products_info = '[{id: 'product_id_1', price: 'price_1', quantity: 'quantity_1'},
{id: 'product_id_2', price: 'price_2', quantity: 'quantity_2'}]'
如果我的页面变量 "CurrentController"='thankyou',我正在尝试使用以下代码直接从后端获取值,我可以轻松地为仅包含一个值的变量执行此操作文章.
示例:
[{if $currentControllerName == "thankyou"}]
var dataLayer = [];
[{assign var="order" value=$oView->getOrder()}]
dataLayer.push(
{email: [{$order->oxorder__oxbillemail->value}]}
);
[{/if}]
问题是当我需要获取不止一篇文章的值时,就像我在开头提到的 products_info 变量一样。
我正在尝试以下代码,但我不确定如何制作迭代器 "append" 或将每个产品值发送到一个变量:
[{if $currentControllerName == "thankyou"}]
var dataLayer = [];
[{assign var="order" value=$oView->getOrder()}]
(
[{foreach from=$orderArticles item="currOrderArticle"}]
[{assign var="currArticle" value=$currOrderArticle->getArticle()}]
[{assign var="currBasePrice" value=$currOrderArticle->getBasePrice()}]
product_info: [{id: [{$currOrderArticle->oxorderarticles__oxartnum->value}],
price: [{$currBasePrice->getBruttoPrice()}],
quantity: [{$currOrderArticle->oxorderarticles__oxamount->value}]}]
[{/foreach}]
)
[{/if}]
您调用的 Javascript 函数 .push() 会在您每次调用它时将一个项目附加到您的 dataLayer 数组。 (参见 docs)
那么为什么不让 smarty 为购物篮中的每个产品呈现对该函数的调用。
[{if $oView->getClassName() == "thankyou"}]
<script>
var dataLayer = [];
[{assign var="basket" value=$oView->getBasket()}]
[{foreach from=$basket->getContents() item=basketitem}]
[{assign var=itemarticle value=$basketitem->getArticle()}]
[{assign var="basketitemprice" value=$basketitem->getPrice()}]
dataLayer.push({ id: [{$itemarticle->oxarticles__oxartnum->value}], price: [{$basketitemprice->getBruttoPrice()}], quantity: [{$basketitem->getAmount()}] });
[{/foreach}]
</script>
[{/if}]
这会将您的产品添加到您的 Javascript dataLayer
数组中。
值得注意的是,以下内容也应该有效:(可能 break 在不受支持的 IE 版本中)
[{if $oView->getClassName() == "thankyou"}]
<script>
var dataLayer = [
[{assign var="basket" value=$oView->getBasket()}]
[{foreach from=$basket->getContents() item=basketitem}]
[{assign var=itemarticle value=$basketitem->getArticle()}]
[{assign var="basketitemprice" value=$basketitem->getPrice()}]
{ id: [{$itemarticle->oxarticles__oxartnum->value}], price: [{$basketitemprice->getBruttoPrice()}], quantity: [{$basketitem->getAmount()}] },
[{/foreach}]
];
</script>
[{/if}]
最后你要做的是创建一个 Javascript 数组(可以被 Google 标签管理器读取)。这是 Thankyou 页面上的最终输出(并且完全有效 Javascript):
<script>
var dataLayer = [];
dataLayer.push({ id: 3788, price: 24.95, quantity: 1 });
dataLayer.push({ id: 1401, price: 129, quantity: 1 });
dataLayer.push({ id: 10101, price: 0, quantity: 1 });
</script>
请注意,您没有使用 PHP 将数据附加到 dataLayer 变量。您正在创建 Javascript 代码(使用 Smarty/PHP),然后将创建 dataLayer 数组(然后可以由 Google 标签管理器 Javascript 使用)