Мне было трудно решить проблему с диспетчером тегов. Я был бы так благодарен, если бы вы могли мне помочь, я совершенно потерян.
Мне нужно внедрить тег отслеживания продаж для веб-сайта сравнения цен, на который мы хотим ссылаться.
Я нашел шаблон отслеживания тегов, предоставленный компанией, однако мне не удалось получить тот же результат. Этот тег доступен на веб-сайте, который меня просят реализовать:
var _kkstrack = {
merchantInfo : [{ country:"COUNTRY_CODE", merchantId:"COMID_VALUE" }],
orderValue: 'ORDER_VALUE',
orderId: 'ORDER_ID',
basket: [{ productname: 'PRODUCT1_NAME',
productid: 'PRODUCT1_ID',
quantity: 'PRODUCT1_QUANTITY',
price: 'PRODUCT1_PRICE'
},
{ productname: 'PRODUCT2_NAME',
productid: 'PRODUCT2_ID',
quantity: 'PRODUCT2_QUANTITY',
price: 'PRODUCT2_PRICE'
}
]
};
(function() {
var s = document.createElement('script');
s.type = 'text/javascript';
s.async = true;
s.src = 'https://s.kk-resources.com/ks.js';
var x = document.getElementsByTagName('script')[0];
x.parentNode.insertBefore(s, x);
})();
Я реализовал этот тег, я создал свои переменные, основанные на моем уровне данных, то есть: «ecommerce.purchase.products.0.id», например, для productid. Однако это не сработало, я имею в виду, что у меня было дублирование, для 2 заказанных разных продуктов у меня получилось одно и то же название, идентификатор для обоих. Второй предмет имел те же характеристики, что и первый.
Итак, я попробовал второе решение: Для каждой переменной я использовал собственный Javascript (Kelkoo — покупка соответствует переменной уровня данных «ecommerce.purchase»). Вот что я написал:
function() {
var products = {{Kelkoo - purchase}};
return products.map(function(prod) { return prod.price; });
}
К сожалению, возникла другая проблема: я получил все данные о продуктах рядом друг с другом, разделенные запятой (productid: 34756, 8546), как показано ниже:
basket: [{ productname: 'PRODUCT1_NAME', 'PRODUCT2_NAME',
productid: 'PRODUCT1_ID', 'PRODUCT2_ID',
quantity: 'PRODUCT1_QUANTITY', 'PRODUCT2_QUANTITY',
price: 'PRODUCT1_PRICE','PRODUCT2_PRICE'
}
]
};
Я хотел бы вернуть данные в этом формате
basket: [{ productname: 'PRODUCT1_NAME',
productid: 'PRODUCT1_ID',
quantity: 'PRODUCT1_QUANTITY',
price: 'PRODUCT1_PRICE'
},
{ productname: 'PRODUCT2_NAME',
productid: 'PRODUCT2_ID',
quantity: 'PRODUCT2_QUANTITY',
price: 'PRODUCT2_PRICE'
}
]
Как я могу сделать, я должен построить массив?
Я благодарю вас за внимание к этому вопросу.
Спасибо
Извините, что не указал это, я новичок, поэтому мне это не пришло в голову: это расширенная электронная коммерция.
Переменная products уже представляет собой массив объектов. Вам просто нужно включить это как часть json, который был отправлен в электронную коммерцию. Я не думаю, что вам нужно строить что-то особенное.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Насколько я понимаю, у вас уже есть слой данных с данными о продукте, который соответствует требуемому содержанию и структуре данных расширенной электронной торговли для Google Analytics. Вы хотите преобразовать данные о продукте в формат, используемый в ключе basket переменной _kkstrack.
На основе расширенной электронной торговли Руководство для разработчиков данные о покупках в расширенной электронной торговле имеют следующий формат.
dataLayer.push({
'ecommerce': {
'purchase': {
'actionField': {
'id': 'T12345', // Transaction ID. Required for purchases and refunds.
'affiliation': 'Online Store',
'revenue': '35.43', // Total transaction value (incl. tax and shipping)
'tax':'4.90',
'shipping': '5.99',
'coupon': 'SUMMER_SALE'
},
'products': [{ // List of productFieldObjects.
'name': 'Triblend Android T-Shirt', // Name or ID is required.
'id': '12345',
'price': '15.25',
'brand': 'Google',
'category': 'Apparel',
'variant': 'Gray',
'quantity': 1,
'coupon': '' // Optional fields may be omitted or set to empty string.
},
{
'name': 'Donut Friday Scented T-Shirt',
'id': '67890',
'price': '33.75',
'brand': 'Google',
'category': 'Apparel',
'variant': 'Black',
'quantity': 1
}]
}
}
});
У вас есть несколько вариантов ссылки на эти данные: либо путем указания всего объекта электронной торговли на переменную dataLayer в GTM (а затем ссылки на его ключи в вашем коде), либо путем указания непосредственно на массивы продуктов. (Я использую это последнее, поэтому имя переменной dataLayer будет ecommerce.purchase.products)
Присвоив продуктам имя переменной GTM {{DLV — Продукты для электронной торговли}}, вы можете создать пользовательскую функцию JavaScript для выполнения необходимых преобразований.
function() {
return {{DLV - Ecommerce purchase products}}.map(function(e) {
return {
productname: e.name,
productid: e.id,
quantity: e.quantity,
price: e.price
};
});
}
В вашей функции вы перебираете все элементы массива продуктов и возвращаете существующие данные под разными ключами, которые запрашиваются этим другим инструментом. Теперь вы можете использовать эту пользовательскую переменную JavaScript в своем пользовательском теге HTML, где вы устанавливаете содержимое переменной basket.
Очевидно, вы можете использовать свое собственное соглашение об именах переменных, если вы ссылаетесь на него в своей пользовательской переменной JavaScript.
Надеюсь, я хорошо понял ваш вопрос, и вы сможете решить свою задачу с помощью этого ответа.
Большое спасибо, это действительно помогло мне, я боролся, и теперь я вижу яснее, я попытался, и это сработало.
Можете ли вы уточнить, что вы пытаетесь отслеживать? Является ли конечная цель событиями в GA? Транзакции электронной коммерции в GA? Расширенная электронная коммерция в GA?