【问题标题】:List of multiple products into php datalayer多个产品列表进入php数据层
【发布时间】:2016-04-08 07:39:13
【问题描述】:

我想在“订单确认页面”(感谢您购买页面)中为我的网站的营销像素获得一个很好的数据层跟踪。 该网站使用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 变量一样。

我正在尝试以下代码,但我不确定如何使迭代器“附加”或将每个产品值发送到一个变量:

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

【问题讨论】:

  • 我不确定你想要归档什么,但 OXID 使用 smarty 作为模板语言,你可以使用 Smarty 的捕获将输出附加到一个变量。

标签: php smarty google-tag-manager google-datalayer oxid


【解决方案1】:

您调用的 .push() Javascript 函数会在您每次调用时将一个项目附加到您的 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 数组中。

值得注意的是,以下内容也应该有效:(在不受支持的 IE 版本中可能是 break

[{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 Tag Managers Javascript 使用)

【讨论】:

    猜你喜欢
    • 2020-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    • 1970-01-01
    • 2017-05-11
    相关资源
    最近更新 更多