【问题标题】:Google Tag Manager custom javascript variable based on ecommerce datalayer object基于电子商务数据层对象的谷歌标签管理器自定义 javascript 变量
【发布时间】:2018-01-15 09:17:47
【问题描述】:

我正在尝试根据 GTM 数据层电子商务对象中包含的数据计算购物车的价值。我将整个电子商务对象放入一个数据层变量中,以便我可以在自定义 js 变量中使用它,但我无法使递归计算工作。

这是来自数据层的代码示例:

{
  "event": "checkout",
  "ecommerce": {
    "checkout": {
      "products": [
        {
          "name": "coat",
          "id": "14M",
          "quantity": 1,
          "price": "100.00"
        },
        {
          "name": "pants",
          "id": "12L",
          "quantity": 3,
          "price": "50.00"
        }
      ]
    }
  }
}`

我的目标是确定产品数组中的产品数量,然后执行产品价格 * 产品数量的计算,所需的次数需要遍历整个产品数组。在这种情况下,它会是这样的:

(1*100) + (3*50) = 250。

我尝试从Simo Ahava's related blogpost 修改代码但没有成功。他的博文和我的意图之间的区别是:

  1. 我不需要将购物车值设置为电子商务自定义指标。我只想在自定义 js 中返回购物车的值。
  2. 我不希望这涉及在购物车中添加或删除商品。相反,我只想计算触发 GTM 事件“结账”时的价值,并计算所包含产品的价值。

提前致谢。

【问题讨论】:

    标签: javascript google-analytics google-tag-manager enhanced-ecommerce google-datalayer


    【解决方案1】:

    此 JS 函数将获取最新的数据层电子商务事件并计算产品总和:

    function productSum() {
        var result = 0;
        var ecommerceDataLayers = dataLayer.filter(function(e){return e.event == "checkout";});
        if (ecommerceDataLayers.length)
        {
            var lastEcommerce = ecommerceDataLayers[ecommerceDataLayers.length-1];
            for(i=0;i<lastEcommerce.ecommerce.checkout.products.length;i++) {
                var product = lastEcommerce.ecommerce.checkout.products[i];
                result += product.quantity*parseFloat(product.price);
            }
        }
        return result;
    }
    

    【讨论】:

      【解决方案2】:

      由于您已经创建了 {{ecommerce}} 变量,因此很容易根据产品的数量和产品的价格获取总金额。

      您必须在自定义 js 变量上创建 Order Subtotal 然后在那个自定义的 js 框中 粘贴以下代码

      function(){
        var productList={{ecommerce}}.checkout.products;
        var totalAmount=0;
        for(var i=0;i<productList.length;i++)
        {
          totalAmount+=(productList[i].quantity)*(parseFloat(productList[i].price));
        }
        return totalAmount;
      }
      

      我希望这能帮助您解决问题

      【讨论】:

      • 这是正确的,谢谢 Dinesh。我还对其进行了修改,以便在连接的逗号分隔列表中获取产品 ID function(){ var productList={{ecommerce}}.checkout.products; var productIds=''; for(var i=0;i
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-11
      相关资源
      最近更新 更多