2016-04-08 1 views
1

Je voudrais obtenir un bon suivi de la couche de données pour les pixels marketing de mon site dans la "page de confirmation de commande" (merci pour votre page d'achat). Le site utilise OXID Shop comme plate-forme de commerce électronique.Liste des produits multiples dans php datalayer

Je voudrais avoir la configuration suivante:

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'}]' 

J'essaie le code suivant pour obtenir les valeurs directement à partir du backend si ma page variable « CurrentController » = « thankyou », que je peux facilement faire pour une variable qui contient uniquement les valeurs d'un article.

Exemple:

[{if $currentControllerName == "thankyou"}]  

    var dataLayer = []; 

    [{assign var="order" value=$oView->getOrder()}] 

    dataLayer.push(
        {email: [{$order->oxorder__oxbillemail->value}]} 
        ); 

[{/if}] 

La question est quand je dois obtenir des valeurs pour plus d'un article, quelque chose comme ce que je l'ai mentionné au début de la variable products_info.

J'essaie le code suivant, mais je ne suis pas sûr de savoir comment faire le iterator « append » ou envoyer chaque valeur de produits à une seule variable:

[{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}] 
+0

Je ne suis pas sûr de ce que vous voulez archiver, mais OXID utilise smarty comme un langage de modèle et vous pouvez utiliser la capture de Smarty pour ajouter la sortie à une seule variable. – Alex2php

Répondre

1

La .Le bouton de fonction Javascript() que vous appelez ajoute un élément à votre DataLayer Array chaque fois que vous l'appelez. (Voir docs)

Alors pourquoi ne pas laisser smarty rendre l'appel à cette fonction pour chaque produit qui était dans le panier.

[{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}] 

Cela va ajouter vos produits à votre tableau Javascript dataLayer.

Il est intéressant de noter que les éléments suivants devraient également travailler: (peut break dans la version non prise en charge d'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}] 

En fin de compte ce que vous essayez de faire est de créer une matrice Javascript (qui peut être lu par Google Tag Manager). Ceci est le résultat final (et parfaitement valide Javascript) sur la page 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> 

Notez que vous ne l'utilisez PHP pour ajouter les données à la variable dataLayer. Vous créez un code Javascript (avec Smarty/PHP) qui va ensuite créer le dataLayer Array (qui peut ensuite être utilisé par Google Tag Managers Javascript)