Как вставить второй продукт в уровень данных с помощью 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()
,
Следующие ресурсы оказали некоторую помощь:
- ТАК вопрос под названием Console возвращает значение, а переменная Google Tag Manager - нет
- Менеджер тегов Google для ботаников от Simo Ahava.
Поскольку вы не можете продвинуть продукт в одиночку, вам нужно построить объект, в котором есть все продукты.
- Первый шаг - получить объект, который уже находится в dataLayer (даже если он пуст).
- получить объект товаров
- протолкнуть новый предмет внутрь
- выдвинуть весь объект в dataLayer
Если у вас есть проблемы с любым из этих шагов, дайте мне знать.
Попробуйте сначала определить переменную dataLayer с помощью:
var dataLayer = window.dataLayer || [];
Он возьмет существующую переменную dataLayer и добавит use it или, если ее нет, создаст для нее массив.
Кроме того, я вижу, что вы используете строчный "datalayer". Это должен быть "dataLayer".
Я надеюсь, это поможет.