Необходим мудрый JavaScript.
Мне нужен способ создания массива продуктов для Google Analytics dataLayer
, при использовании Django в качестве бэкэнда и отправке переменной {{ order_items }}
в thank_you_page.html
template:
products: [{
id: 'product_id',
name: 'Product A',
price: '24.00',
quantity: 1,
coupon: 'FOR20'
},{
id: 'another_product_id',
name: 'MY ADD-ON',
price: '1.00',
quantity: 1,
coupon: 'ADD-ONS OFF'
}]
Он будет частью dataLayer
, который впоследствии будет использоваться для сбора значений для Google Analytics через Менеджер тегов Google.
Я использую Django для бэкэнда и отправляю эти переменные во внешний интерфейс:
{{order}}
{{order_items}}
И сказал, что этот массив должен быть внутри другого «родительского» массива, согласно этому сообщению в блоге отa Google Analytics Expert :
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
event: 'eec.purchase',
ecommerce: {
currencyCode: 'EUR',
purchase: {
actionField: {
id: 'ORDER12345',
affiliation: 'Simo\'s shop',
revenue: '11.00',
tax: '1.00',
shipping: '2.00',
coupon: 'SUMMER2019'
},
products: [{
id: 'product_id',
name: 'Product A',
price: '24.00',
quantity: 1,
coupon: 'FOR20'
},{
id: 'another_product_id',
name: 'MY ADD-ON',
price: '1.00',
quantity: 1,
coupon: 'ADD-ONS OFF'
}]
}
}
});
Должен ли я поставить пустой products = []
, а затем выполнить цикл for, чтобы вставить элементы внутрь?
products = []
{% for item in order_items %}
products.push({
id: item.id,
name: item.name,
price: item.price,
quantity: item.quantity,
coupon: item.coupon
});
{% endfor %}
ОБНОВЛЕНИЕ 1:
Использование этого кода:
{% block data_layer %}
<script>
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
event: 'eec.purchase',
ecommerce: {
currencyCode: 'PEN',
purchase: {
actionField: {
id: {{ order_number }},
affiliation: 'Stickers Gallito E-Commerce',
revenue: {{ total }},
shipping: {{ costo_despacho }},
coupon: 'SUMMER2019'
}
},
products: []
}
});
</script>
{% for item in order_items %}
<script>
window.dataLayer.ecommerce.products.push({
id: item.order.id,
name: item.name,
price: item.price,
quantity: item.quantity
});
</script>
{% endfor %}
{% endblock %}
Ошибка :
Uncaught TypeError: Невозможно прочитать свойство 'products' с неопределенным значением (index): 72
Это строка 72:
window.dataLayer.ecommerce.products.push({