Prestashop : tracking des commandes via order-confirmation.tpl

J’ai cru bon parler un peu du tracking des commandes dans Prestashop afin de les faire remonter dans des outils d’analyse externes. Vous avez déjà un module existant pour Google Analytics bien que ce dernier pose parfois des problèmes, notamment dans la version 1.5 de Prestashop. Pour tous les autres, il faut mettre les mains à la pâte et commencer à coder. Je vous proposer donc un article simple pour mettre en place tous les éléments liés à la vente de produits dans votre boutique via le template de confirmation de commande de votre thème. Cette exemple a été fait avec la version 1.6.0.13 de Prestashop.

prestashopconfirmationcommande

Dans un premier temps, il est nécessaire de faire une surcharge de la classe OrderConfirmationController.php qui est chargée d’assigner les variables PHP aux variables Smarty. De base, les informations retournées par cette classe sont très succinctes. Commencez donc par créer ce fichier dans le dossier /override/controllers/front de votre installation.

Voici le code complet que vous devez coller dans ce fichier. Rien d’autre n’est nécessaire :

<?php

    class OrderConfirmationController extends OrderConfirmationControllerCore
    {

        public function initContent()
        {
            parent::initContent();

            $order = new Order($this->id_order);
            $cart_rules = $order->getCartRules();

            $this->context->smarty->assign(array(
                'is_guest' => $this->context->customer->is_guest,
                'HOOK_ORDER_CONFIRMATION' => $this->displayOrderConfirmation(),
                'HOOK_PAYMENT_RETURN' => $this->displayPaymentReturn(),
                'total_paid_tax_incl' => number_format($order->total_paid_tax_incl, 2, ',', ' '),
                'total_paid_tax_excl' => number_format($order->total_paid_tax_excl, 2, ',', ' '),
                'total_shipping_tax_incl' => number_format($order->total_shipping_tax_incl, 2, ',', ' '),
                'total_shipping_tax_excl' => number_format($order->total_shipping_tax_excl, 2, ',', ' '),
                'total_products_wt' => number_format($order->total_products_wt, 2, ',', ' '),
                'total_products' => number_format($order->total_products, 2, ',', ' '),
                'id_order' => $this->id_order,
                'payment_method' => $order->payment,
                'order_reference' => $order->reference,
                'reduction_wt' => isset($cart_rules[0]['id_order_cart_rule']) ? number_format($cart_rules[0]['value'], 2, ',', ' ') : 0,
                'reduction_tax_excl' => isset($cart_rules[0]['id_order_cart_rule']) ? number_format($cart_rules[0]['value_tax_excl'], 2, ',', ' ') : 0,
                'voucher_code' => isset($cart_rules[0]['id_cart_rule']) ? $this->getVoucherCodeById($cart_rules[0]['id_cart_rule']) : ''
            ));

            if ($this->context->customer->is_guest) {
                $this->context->smarty->assign(array(
                    'id_order' => $this->id_order,
                    'reference_order' => $this->reference,
                    'id_order_formatted' => sprintf('#%06d', $this->id_order),
                    'email' => $this->context->customer->email
                ));
                /* If guest we clear the cookie for security reason */
                $this->context->customer->mylogout();
            }

            $this->setTemplate(_PS_THEME_DIR_ . 'order-confirmation.tpl');
        }

        public static function getVoucherCodeById($id_cart_rule)
        {
            if (!Validate::isCleanHtml($id_cart_rule)) {
                return false;
            }
            return Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('SELECT `code` FROM `' . _DB_PREFIX_ . 'cart_rule` WHERE `id_cart_rule` = \'' . pSQL($id_cart_rule) . '\'');
        }

    }

Supprimez maintenant le fichier class_index.php situé dans le dossier /cache de Prestashop. Il sera re-créé automatiquement pour prendre en compte ce nouveau fichier.

Ouvrez maintenant le fichier order-confirmation.tpl situé dans votre thème. C’est à cet endroit que vous êtes censé ajouter le code de tracking des commandes, que ce soit pour Analytics, Affilinet, ou autre. Voici le listing des variables Smarty que vous pouvez maintenant utiliser :

Id commande : {$id_order}

Montant total TTC : {$total_paid_tax_incl}

Montant total HT : {$total_paid_tax_excl}

Livraison TTC : {$total_shipping_tax_incl}

Livraison HT : {$total_shipping_tax_excl}

Prix des produits TTC : {$total_products_wt}

Prix des produits HT : {$total_products}

Moyen de paiement : {$payment_method}

Référence de la commande : {$order_reference}

Montant réduction TTC : {$reduction_wt}

Montant réduction HT : {$reduction_tax_excl}

Code promo : {$voucher_code}

Naturellement, pensez à vider le cache via l’administration du site pour mettre à jour le template. Il ne reste plus qu’à intégrer les variables Smarty dans le code Javascript que vous aurez récupéré chez Affilinet, Analytics…

HTTPs : Mise en place d'un certificat SSL gratuit sur dédié (Apache)
WordPress / Prestashop : auditer un serveur en cas de piratage

15 Comments on “Prestashop : tracking des commandes via order-confirmation.tpl”

  1. Merci, l’article est clair, nous avons réussit à installer le tout sur le order-confirmation.php du site et le submit.php du module Paypal.
    Vraiment merci, sur le forum Prestashop, dans les sujets tracking des ventes, tracking affiliation, tracking analytic,… il y a tout et n’importe quoi.

  2. Bonjour,
    Merci beaucoup pour ce tuto, j’étais dans une impasse pour insérer le tracking sur mon site, par contre mon prestataire d’affiliation me dit que cela fonctionne pour les virements mais pas pour paypal. D’après le message d’Henri j’ai l’impression qu’il faut insérer le code que dans le OrderConfirmationController.php ? est ce bien ça ? Pourtant dans le fichier submit.php de paypal j’ai le code :
    if (version_compare(_PS_VERSION_, ‘1.5’, ‘<'))
    require_once(_PS_ROOT_DIR_.'/controllers/OrderConfirmationController.php');

    Je ne sais plus trop quoi faire.
    Merci

    1. J’avoue que je me suis limité au paiement par virement et chèque. Mais peu importe le moyen de paiement en fait. Normalement, vous tombez toujours sur cette page de confirmation. Donc il sera toujours possible de récupérer les variables.
      Sur quelle page tombez vous après un paiement par paypal ?
      Cela ne fonctionne pas, mais dans quel sens : le code ne remonte rien ? la page est en erreur ? que dit le debug ?

  3. MERCI MILLE FOIS !
    Clair simple et précis bravo

    Cependant, avec d’implémenter mes tags je voulais tester quelques conditions sur le montant cde récupéré…
    Si le $total_paid_tax_incl est inférieur à 150, ou compris entre 150 et 400 j’ai le bon message.
    Si il est supérieur à 400 … j’ai le message identique de la condition inférieur à 150 lolllll.
    De quoi devenir fou

    1. C’est normal. Tu fais $total_paid_tax_incl = 150 au lieu de $total_paid_tax_incl == 150

      Dans un if pour vérifier une valeur, on met un double égale sinon tu attribues la valeur à ta variable.

  4. Bonjour,
    Super code tres utiles,
    Cependant savez-vous comment faire pour afficher le montant HT de la commande – les frais de port et – les bon de réduction ?
    et autre point comment faire pour afficher le Code Iso de currency c’est a dire la devise EUR USD ou GBP de la commande

    1. Bonjour,

      Rapidement, je dirais de faire : total_paid_tax_incl – total_shipping_tax_incl

      Pour la devise, essayez : {$currency->iso_code}

  5. Merci pour votre retour très rapide je viens de tester et malheureusement ça ne fonctionne pas
    La plateforme d’affiliation me demande dans le tracking obligatoirement cette devise en ISO
    je peux mettre dans le code directement « EUR » mais pas très dynamique comme solution

  6. Bonjour,
    est t’il possible de sortir les produits avec un ovveride ?

    pour le tag shopping.com il me demande nom du produit, prix unitaire , quantité et meme catégorie des produits. ça s’annonce pas facile.

  7. Le module PayPal implémente son propre contrôleur module pour le order confirmation. Il faut donc reproduire les changements dans les fichiers concernes du module.

  8. Bonjour,

    Merci pour votre code.

    Auriez vous la méthode pour Prestashop 1.5.6.2 ?

    Comment permettre la prise en compte des commandes payées par Paypal ?

    Merci par avance pour toute réponse.

    1. Bonjour,

      Paypal utilise sa propre page de confirmation de commande. Il faut faire une surcharge des templates du modules à partir du thème.
      Généralement, je fais la surcharge du fichier express_checkout_payment.tpl dans /themes/THEME/modules/paypal/views/templates/hook/

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *