Я хотел бы получить хорошее отслеживание уровня данных для маркетинговых пикселей моего сайта на «странице подтверждения заказа» (спасибо за вашу страницу покупки).
Сайт использует OXID Shop в качестве платформы электронной коммерции.
Я хотел бы иметь следующую настройку:
IF currentPage == 'thankyou':
products_info = '[{id: 'product_id_1', price: 'price_1', quantity: 'quantity_1'},
{id: 'product_id_2', price: 'price_2', quantity: 'quantity_2'}]'
Я пытаюсь следующий код, чтобы получить значения непосредственно из бэкэнда, если моя переменная страницы «CurrentController» = ‘thankyou’, что я легко могу сделать для переменной, которая содержит только значения одной статьи.
Пример:
[{if $currentControllerName == "thankyou"}]
var dataLayer = [];
[{assign var="order" value=$oView->getOrder()}]
dataLayer.push(
{email: [{$order->oxorder__oxbillemail->value}]}
);
[{/if}]
Проблема в том, что мне нужно получить значения для более чем одной статьи, что-то вроде того, что я упоминал в начале для переменной products_info.
Я пытаюсь следующий код, но я не уверен, как заставить итератор «добавить» или отправить значения каждого продукта в одну переменную:
[{if $currentControllerName == "thankyou"}]
var dataLayer = [];
[{assign var="order" value=$oView->getOrder()}]
(
[{foreach from=$orderArticles item="currOrderArticle"}]
[{assign var="currArticle" value=$currOrderArticle->getArticle()}]
[{assign var="currBasePrice" value=$currOrderArticle->getBasePrice()}]
product_info: [{id: [{$currOrderArticle->oxorderarticles__oxartnum->value}],
price: [{$currBasePrice->getBruttoPrice()}],
quantity: [{$currOrderArticle->oxorderarticles__oxamount->value}]}][{/foreach}]
)
[{/if}]
Функция Javascript .push (), которую вы вызываете, добавляет элемент в ваш массив dataLayer каждый раз, когда вы вызываете его. (увидеть документы)
Так почему бы не позволить smarty сделать вызов этой функции для каждого продукта, который был в корзине.
[{if $oView->getClassName() == "thankyou"}]
<script>
var dataLayer = [];
[{assign var="basket" value=$oView->getBasket()}]
[{foreach from=$basket->getContents() item=basketitem}]
[{assign var=itemarticle value=$basketitem->getArticle()}]
[{assign var="basketitemprice" value=$basketitem->getPrice()}]
dataLayer.push({ id: [{$itemarticle->oxarticles__oxartnum->value}], price: [{$basketitemprice->getBruttoPrice()}], quantity: [{$basketitem->getAmount()}] });
[{/foreach}]
</script>
[{/if}]
Это добавит ваши продукты в ваш Javascript dataLayer
Массив.
Стоит отметить, что следующее также должно работать: (может перерыв в неподдерживаемой версии IE)
[{if $oView->getClassName() == "thankyou"}]
<script>
var dataLayer = [
[{assign var="basket" value=$oView->getBasket()}]
[{foreach from=$basket->getContents() item=basketitem}]
[{assign var=itemarticle value=$basketitem->getArticle()}]
[{assign var="basketitemprice" value=$basketitem->getPrice()}]
{ id: [{$itemarticle->oxarticles__oxartnum->value}], price: [{$basketitemprice->getBruttoPrice()}], quantity: [{$basketitem->getAmount()}] },
[{/foreach}]
];
</script>
[{/if}]
В конце концов, вы пытаетесь создать массив Javascript (который может быть прочитан Менеджером тегов Google). Это окончательный вывод (и совершенно правильный Javascript) на странице Thankyou:
<script>
var dataLayer = [];
dataLayer.push({ id: 3788, price: 24.95, quantity: 1 });
dataLayer.push({ id: 1401, price: 129, quantity: 1 });
dataLayer.push({ id: 10101, price: 0, quantity: 1 });
</script>
Обратите внимание, что вы не используете PHP для добавления данных в переменную dataLayer. Вы создаете код Javascript (с помощью Smarty / PHP), который затем создает массив dataLayer (который затем может использоваться Javascript менеджеров тегов Google)
Других решений пока нет …