Как вставить второй продукт в уровень данных с помощью GTM

Я исправляю расширенный код повторной записи в электронной коммерции для аналитики Google с помощью диспетчера тегов Google - путем скрининга данных для этапа проверки в процессе. Код выглядит так:

var els = document.querySelectorAll('div.field_cart');

Array.prototype.forEach.call(els,function(element){

dataLayer.push({
  'event': 'checkout',
  'ecommerce': {
      'checkout': {
        'actionField': {'step': 1, 'option': 'Visa'},
        'products': [{
            'id': $('div.field_cart')[0].innerText,
        'price': $('div.field_cart')[1].innerText.match(/[0-9]+/),
        'quantity': $('div.field_cart')[2].innerText
     }//,{}...//
    ]
  }
 });
})

проблема в том, что если есть более одного элемента - второй переписывает первый и т. д. вместо того, чтобы толкать... Я хотел бы знать, как добавить новый продукт к объекту products?

2 ответа

Решение

У меня получается менеджер тегов гугл перемонтирован dataLayer.push() метод для запуска событий и защиты размера dataLayer. Побочным эффектом является то, что он работает не так, как ожидалось. Способ преодоления этой проблемы состоял в том, чтобы поместить все очищенные данные продукта в переменную javascript и, когда она будет готова, вставить эту переменную в dataLayer следующее:

function scrape2DL() {    
    dataLayer.push({'ecommerce.checkout.actionField': {step: 2}}); //action object

    var base = 0; 
    var products=[];
    while (base < $('div.field_cart').length/4) {
       products.push([{id: $('div.field_cart')[4 * base + 0].innerText, price: $('div.field_cart')[4 * base + 1].innerText.match(/[0-9]+/), quantity: $('div.field_cart')[4 * base + 2].innerText}]);
       base += 1;
    }//while 
    dataLayer.push({'ecommerce.checkout.products': products}); // add a product 
 }
 scrape2DL();
 dataLayer.push({event: 'checkout'});      // for GTM triggers

Однако оказывается, что можно извлечь продукты из слоя данных в переменную javascript, используя метод get уровня данных, и затем добавить в него больше продуктов. Однако я в конечном счете избежал этого подхода, поскольку он пропускает проверку охраны событий и размера, подключенную к dataLayer.push(),

Следующие ресурсы оказали некоторую помощь:

Поскольку вы не можете продвинуть продукт в одиночку, вам нужно построить объект, в котором есть все продукты.

  • Первый шаг - получить объект, который уже находится в dataLayer (даже если он пуст).
  • получить объект товаров
  • протолкнуть новый предмет внутрь
  • выдвинуть весь объект в dataLayer

Если у вас есть проблемы с любым из этих шагов, дайте мне знать.

Попробуйте сначала определить переменную dataLayer с помощью:

var dataLayer = window.dataLayer || [];

Он возьмет существующую переменную dataLayer и добавит use it или, если ее нет, создаст для нее массив.

Кроме того, я вижу, что вы используете строчный "datalayer". Это должен быть "dataLayer".

Я надеюсь, это поможет.

Другие вопросы по тегам