smarty — список нескольких продуктов в php datalayer

Я хотел бы получить хорошее отслеживание уровня данных для маркетинговых пикселей моего сайта на «странице подтверждения заказа» (спасибо за вашу страницу покупки).
Сайт использует 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}]

1

Решение

Функция 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)

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]