Prestashop : afficher le nombre de produits commandés et le montant en front

Une fois n’est pas coutume mais voici un article supplémentaire dédié à Prestashop. La problématique cette fois va être de récupérer le nombre de produits commandés ainsi que le montant des commandes validées (pas en erreur ou non payées) pour les afficher sur le front. Vous me direz, l’historique des commandes est de toute façon dans son compte client mais afficher cette information dans le front office permet par exemple de le situer par rapport à une échelle de fidélisation (Vous avez commandé 4 articles, encore 16 pour bénéficier de 5€ de réduction).

Je vais vous montrer comment le faire avec la version 1.6.0.14 de Prestashop et son thème par défaut. Dans un premier temps, nous allons fait une surcharge de classe. Créez le fichier FrontController.php dans le dossier prestashop/override/classes/controller/ avec le code ci-dessous :

<?php

    class FrontController extends FrontControllerCore
    {
        public static function getProductsOrderedTotalAmount($id)
        {
            if ($orders = Order::getCustomerOrders(Context::getContext()->customer->id)) {
                $totalAmount = 0;
                foreach ($orders as $order) {
                    $myOrder = new Order((int)$order['id_order']);
                    /*
                    [current_state] => 6 // annulée
                    [current_state] => 7 // remboursée
                    [current_state] => 8 // erreur paiement
                    */
                    if (!in_array($myOrder->current_state, array(6, 7, 8))) {
                        $totalAmount += $myOrder->total_paid_tax_incl;
                    }
                }
                return $totalAmount;
            }
            return 0;
        }

        public static function getProductsOrderedTotalNumber($id)
        {
            if ($orders = Order::getCustomerOrders(Context::getContext()->customer->id)) {
                $totalNumber = 0;
                foreach ($orders as $order) {
                    $myOrder = new Order((int)$order['id_order']);
                    /*
                    [current_state] => 6 // annulée
                    [current_state] => 7 // remboursée
                    [current_state] => 8 // erreur paiement
                    */
                    if (!in_array($myOrder->current_state, array(6, 7, 8))) {
                        $details = OrderDetail::getList((int)$order['id_order']);
                        foreach ($details as $detail) {
                            $totalNumber += $detail['product_quantity'];
                        }
                    }
                }
                return $totalNumber;
            }
            return 0;
        }
    }

Il contient deux fonctions :

  • getProductsOrderedTotalAmount() qui permet de récupérer le montant total de toutes les commandes dont le statut n’est pas 6, 7 ou 8
  • getProductsOrderedTotalNumber() qui permet de récupérer le nombre de produits commandés dont le statut des commandes n’est pas 6, 7 ou 8

Pensez à vider le cache de Prestashop pour la bonne prise en compte de cette surcharge.

Pour utiliser ces fonctions sur la page d’accueil, ouvrez le fichier index.tpl de votre thème et ajoutez tout en haut le code suivant :

{if $logged}
<div id="order-total">
    À ce jour, vous avez commandé <span>{FrontController::getProductsOrderedTotalNumber()}</span> articles,
    pour un  total de <span>{FrontController::getProductsOrderedTotalAmount()}€</span> !
</div>
{/if}

Pour les utilisateurs connectés à leur compte, il va donc afficher les informations recherchées :

articles-commandés

Vous pouvez allez plus loin en affichant le nombre d’articles qui reste à commander, dans le fichier tpl :

{if $logged}
<div id="order-total">
    {if (20-FrontController::getProductsOrderedTotalNumber()) <= 0}
      Bravo ! Pour bénéficier de 5€ de réduction, utilisez le code : <span>BRAVOLIJE5</span>
    {else}
      À ce jour, vous avez commandé <span>{FrontController::getProductsOrderedTotalNumber()}</span>
      articles ({FrontController::getProductsOrderedTotalAmount()}€),
      plus que <span>{20-FrontController::getProductsOrderedTotalNumber()}</span> pour bénéficier de 5€ de réduction !
    {/if}
</div>
{/if}

Ce qui donne :

changement-statut

PS : voici le style que j’ai utilisé :

#order-total span {
    font-size: 30px;
}

#order-total {
    padding: 20px 10px;
    text-align: center;
    width: 100%;
    background: none #E27617;
    margin: 0 0 20px;
    font-size: 20px;
    color: white;
}
Prestashop : déplacer la barre de recherche dans la barre de navigation
Prestashop : afficher la remise accordée à un groupe de clients

5 Comments on “Prestashop : afficher le nombre de produits commandés et le montant en front”

  1. Super article comme toujours !

    Je souhaiterai avertir le client : » plus que 5€ avant de bénéficier de la livraison »
    mais j’ai plusieurs zones avec différents franco de port, est-ce compliqué ?

    Merci d’avance ;)

    1. Bonjour et merci ;)
      Le code promo est géré via l’admin de Prestashop.
      Ses effets sont paramétrables et tu peux définir les frais de port gratuit si c’est ta question.
      Quel soucis rencontres-tu ?

  2. Bonjour, super tuto!

    Je voudrais afficher au client lambda combien de clients regardent ou on regarder le meme produit sur la page en cours et également le nombre total de commandes un peu sur le site KLM, je trouve que cela pousse a commander.

    Merci pour votre aide.

    1. Bonjour,
      C’est très intéressant effectivement.
      Je dirais que si vous avez un trafic faible, afficher le nombre de personne sur une page en temps réel est contre productif.
      Les internautes pourraient se rendre compte que finalement, personne d’autre n’est sur le site.
      Pour le reste, je dis oui oui oui.
      Etant donné que c’est particulier, si c’est une fonctionnalité qui vous intéresse, n’hésitez pas à revenir vers moi par email pour travailler ensemble.
      Merci

  3. Hello,

    En voilà une bonne idée, je pense que c’est assez incitateur à l’action ce genre de message, un peu comme sur l’application Wish qui continue à solliciter l’acheteur pour lui montrer qu’il est en train de réaliser une bonne affaire.

    Je note l’idée, peut-être que je ferai un tuto vidéo en reprenant ta méthode dans Prestashop 1.7.

    Merci pour cette manière de faire très intéressante !

Laisser un commentaire

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