Prestashop et le champ bon de réduction absent

Depuis tout ce temps, il n’est pas rare que je voie le cas du « champ de bon réduction » qui ne s’affiche pas dans le récapitulatif panier de la boutique. Voyons ensemble comment y remédier à ce problème qui est assez fréquent sous Prestashop.

Explication du problème

Vous avez par exemple créé un bon de réduction dans le back-office de votre boutique, mais voilà… dans le récapitulatif du panier le champ n’apparaît pas, il est du coup impossible pour l’utilisateur de saisir le bon. Si vous lisez cet article, penser à bien vérifier sur votre boutique si le champ s’affiche bien de manière permanente, car celui-ci peut compromettre des ventes, voir frustrer l’acheteur qui ne saura pas où saisir son code.

Le champ pour la saisie ne s’affiche pas, alors qu’un bon de réduction existe.

Correction méthode 1

La première méthode à essayer, c’est de modifier le fichier « shopping-cart.tpl » de votre thème en retirant les balises fermantes et ouvrantes pour la condition « {if $voucherAllowed} ». Le but de la manipulation est de forcer le champ à s’afficher. Il faut effectuer cela normalement à 3 endroits dans le fichier.

Il faut normalement retirer ces 2 balises 3 fois dans le fichier.

Correction méthode 2

Si cela ne fonctionne pas, il faut modifier à nouveau le fichier « shopping-cart.tpl » de votre thème en supprimant cette fois les balises du type class="cart_voucher". Cela évitera à certains fichiers Javascript d’intervenir sur ces éléments de l’interface (ce qui peut parfois influencer l’affichage). Vous devriez pouvoir aussi supprimer 3 fois ces balises.

Parfois la suppression de la classe remédie au problème.

Correction méthode 3

Si vous êtes ici, vous n’avez vraiment pas de chance… Avez-vous installé le module PayPal ? Si oui, c’est peut-être celui-ci perturbe le fonctionnement. Pour cela je vous invite à consulter le fichier « modules/paypal/views/templates/hook/paypal.js » & « modules/paypal/js/paypal.js » et à regarder si vous trouvez à l’intérieur cette ligne :

$('.qty-field.cart_quantity_input, .cart_total_bar, .cart_quantity_delete, #cart_voucher *').remove();

Si vous la trouvez, mettez la en commentaire dans les deux fichier comme ceci :

/*$('.qty-field.cart_quantity_input, .cart_total_bar, .cart_quantity_delete, #cart_voucher *').remove();*/

Respirez un bon coup !

Si vous avez appliqué les 3 patches ci-dessus, normalement le bloc pour l’utilisation des bons de réduction devrait s’afficher.. Le pire reste quand même le point 3 qui concerne le module PayPal, qui retire volontairement le champ bon de réduction dans le but de verrouiller la commande à cette étape du récapitulatif panier.

Enfin le champ devrait s’afficher de manière permanente…

Bilan

Si toutefois le problème persistait encore, il faut bien faire un CTRL+R ou F5 pour bien recharger votre page. Surtout s’il s’agit du point n°3, il faut bien que le fichier Javascript soit actualisé pour qu’il arrête de retirer le champ. Le problème est récurent, je le vois lors de déploiement de boutiques, le bug se remarque surtout à l’utilisation ou lorsqu’on commence à mettre une stratégie en place pour la gestion des bons de réduction.

BOUM !

1 seul mail par semaine - pas de publicité

49 commentaires sur “Prestashop et le champ bon de réduction absent”

  1. Perso sur un Prestashop 1.6, le formulaire « Bons de réduction » s’affiche directement
    dès la mise en place un premier code coté BackOffice dans Promotions > Règles de panier.

    Lors d’une mise en place de boutique je créé ce premier code.
    Ex. « Frais de port Offert » puis le désactive et le formulaire est bien présent sans devoir toucher au code.

    J’ai plus l’impression que Prestashop test cette présence ou non de ce 1er code
    car il n’est pas utile d’afficher ce formulaire si il y a pas de « Bon de réduction » configuré.

    🙂

    1. Hello,

      Effectivement par défaut tout semble se passer correctement, mais je vois régulièrement passer ce problème lors de la xième commande pour un même compte client.

      Le coup du compte PayPal est aussi récurrent, mais ensuite tout dépend de la version de Prestashop et de la configuration générale de la boutique.

      Par principe à présent quand le formulaire des bons de réduction me joue des tours j’applique cette méthode… mais ce n’est pas « obligatoire » 😉 !

      Merci pour ta visite !

  2. Bonjour,

    Le petit + : n’afficher ce bloc que quand le client a effectivement un bon de réduction actif.

    Ca évite que le cliente parte à la chasse aux codes de réduction sur le net alors qu’il est prêt à valider sa commande.

    Je l’ai fait sur une 1.4, il faut simplement que je retrouve le code…

    1. Bonjour,

      Cela sent déjà le vécu 😉 ! Ensuite il faut pouvoir aussi gérer le cas, du bon « actif » pour tout le monde, non-assigné à un client spécifique.

      C’est aussi pour cela qu’il faut bien mettre une date de péremption assez courte pour éviter ce type de désagréments.

      Merci pour votre visite !

  3. Bonjour,

    Pour ceux qui auraient des doutes sur la probabilité de rencontrer le bug concerné par la méthode 3…

    Il faut savoir que ce bug apparaît exclusivement lorsqu’on abandonne un paiement Paypal sans utiliser le lien Paypal prévu pour annuler et retourner vers la boutique du marchand (utilisation du bouton « page précédente » du navigateur par exemple).

    Le problème vient en fait d’un cookie placé par le module Paypal qui n’est pas effacé lorsqu’on abandonne un paiement à l’arrache.

    Bref, la probabilité de rencontrer le bug avec Paypal est donc très sérieuse 😉

    1. Hello,

      Exactement, je confirme aussi que ce n’est pas un cas « isolé », mais un cas « fréquent » qui peut se produit sur une boutique Prestashop utilisant le module officiel de PayPal.

      Merci d’avoir appuyé ce point !

      1. Bonjour, étant plus que débutante sur Prestashop je ne sais pas comment faire les manipulations concernant Prestashop et le champ bon de réduction absent. Pourriez vous me dire où et comment je peux trouver les lignes à modifier. Merci

        1. Bonjour,

          Il faudra absolument retoucher au code de Prestashop, l’étape 3 est nécessaire.

          Si vous n’avez pas de compétences techniques, il faudra vous faire aider par un spécialiste du web.

          Merci pour votre visite !

    1. Bonjour,

      Bonne nouvelle pour vous, j’ai pensé à rédiger ce billet, car moi aussi j’ai été confronté de multiples-fois à ce problème et chercher… cela prend du temps.

      Merci pour votre visite !

    1. Ça fonctionne, mais « paypal express » ne fonctionne plus et n’arrive plus à greffer le Displaypageheader. Il est disparu. J’ai réinitialisé et réinstaller le module paypal rien à faire….

      1. Bonjour,

        Pour PayPal express je pourrai pas vous dire exactement, je désactive toujours cette option, car je la trouve « brouillonne » et cela ne permet pas de conserver toutes les informations du clients + pouvoir conserver un historique clair des transactions.

        Je me suis toujours demandé qui sont les clients qui achètent véritablement avec cette option…

        Merci pour votre visite !

    1. A vérifier le CHMOD à mettre en 755 voir 775 suivant votre hébergeur, si remplacement ne se fait pas c’est qu’il y a un problème de permissions.

  4. Merci pour cette astuce! La correction 3 corrige mon problème… Je ne comprenais plus suivant le navigateur la box s’affichait ou non. je comprends mieux maintenant avec cette histoire de Cookies :hum:

    1. Bonne nouvelle si ça fonctionne, le cas n°3 est souvent rencontré par les marchands, mais pas facile de le détecter sans notion en développement.

  5. j’ai appliqué la méthode 3 concernant paypal, bonne nouvelle le bloc apparait de nouveau

    mauvaise nouvelle il ne fonctionne pas, j’ai beau tester des bons rien ne change!

    faut il réaliser aussi les méthodes 1 et 2?

    1. Normalement la méthode 3 suffit uniquement, est-ce que tu as regardé avec l’inspecteur JS de Firebug, s’il y’avait une erreur d’exécution javascript ?

  6. Bonjour,

    Je viens de faire les 3 étapes mais cela ne fonctionne toujours pas.
    Je precise que je suis en 1.6.0.9

    Peut-Être ai-je oublié une étape ?

  7. Je precise que le champs code de reduction n’apparait pas dans le récapitulatif de la commande
    etape 1 mais uniquement a l’étape 5
    et lorsque je remplis le champs cela me renvoie a l’étape 1

    1. Bonjour,

      Si vous avez installé PayPal, essayez de désactiver le module pour voir si le problème vient de là.

      Merci pour votre visite.

  8. Bonjour,
    Prestashop 1.6.1.6 suite mise à jour fin août deuis 1.4.0.17
    thème responsive de temla
    Le problème est survenu depuis quelques jours sans que je ne le relie à une cause (disparition de la case bons de réduction). j’ai appliqué la méthode 1 et la 2.
    la 3 je ne peux pas, le fichier paypal.js n’est pas au même endroit et l’occurrence cherchée ne concerne que le paypal express que je n’utilise pas.
    j’ai vidé le cache recompilé les templates, vidé le cache de mon navigateur. rien n’y fait.
    j’ai déjà des règles paniers depuis longtemps. qu’à cela ne tienne ! j’en recrée une générale et là la case bons de réduction s’est affichée une fois fugitivement, puis plus jamais …
    rien n’y fait pour linstant.
    ça suit les nombreux bugs et soucis que j’ai eus depuis la mise à jour et qui me donnent aujourd’hui envie de fermer cette boutique qui tourne depuis 5 ans …

    1. Bonjour,

      Dans votre cas je vous conseille.

      1) De désactiver le module PayPal pour voir si le problème est toujours présent.
      2) Si le problème a ensuite disparu, désinstallez le module PayPal et ré-installez la dernière version disponible via Prestashop Addons.
      3) Appliquez ensuite la méthode n°3 énoncée ci-dessus.

      Merci pour votre visite !

  9. Bonjour,

    Problème toujours présent sur la version 1.6.1.9

    Chez moi la case Bons de réduction et le bouton supprimer disparaît.

    J’ai réussi à reproduire le problème, c’est bien un problème Paypal,
    pour produire le problème, il faut faire une commande, choisir Paypal,
    puis une fois arrivé sur Paypal, retourner en arrière ou fermer le site,
    la quand ont reviens sur le site et le panier, la case bons de reduction
    et le bouton supprimé ont disparut.
    Pour les retrouver, il faut supprimer les cookies.

    Pour ne pas avoir ce problème il faut normalement utiliser le bouton
    annuler une fois sur Paypal et pas revenir en arrière comme ça.
    Pareil si ont utilise l’expresse checkout, en cliquant dessus puis en
    revenant en arrière ont retrouve le même problème.

    Donc ma supposition est la suivante, Paypal verrouille la commande donc
    plus de bons de remise ou de bouton supprimer pour que le total reste
    verrouillé, si ont annuler pas elle reste verrouillé d’où le problème.
    Ce verrouillage est mis en place dans un cookie.

    Chez moi la solution qui a fonctionné est la modification du fichier (méthode 3) : /modules/paypal/views/js/paypal.js

    Remplacer la ligne :

    $(‘.qty-field.cart_quantity_input, .cart_total_bar, .cart_quantity_delete, #cart_voucher *’).remove()

    Par :

    /*$(‘.qty-field.cart_quantity_input, .cart_total_bar, .cart_quantity_delete, #cart_voucher *’).remove()*/

    Et ensuite il ne faut pas oublier de vider le cache si non ça ne fonctionne pas, pour cela, allez dans le Back office et sur Paramètres avancés -> Performance et cliquez sur Vider le cache en haut à droite.

    Voilà, pour moi le problème a été résolu de cette manière 😉

    1. Bonjour,

      Le cas de figure le plus populaire est effectivement la méthode 3 (observé chez beaucoup de clients).

      Cette ligne de code reste à mon sens difficile à justifier, pourquoi l’utilisateur régulier PayPal, ne pourrait pas utiliser le bon de réduction ? A voir dans les prochaines versions du module, dont celle pour Prestashop 1.7 si ce problème est toujours d’actualité.

      Merci de nous avoir fait ce retour !

  10. Bonjour à tous,

    Je lis ce thread ici et également dans le forum de Prestashop et les trois solutions proposées semble marcher pour ceux chez qui le champs ne s’active pas.

    Par contre je rencontre un problème légèrement différent. Le champs du bon de réduction est bien présent mai je ne peux rien mettre (impossible d’écrire dans le champs, ni de cliquer sur le bouton) et ceci uniquement avec Firefox (version 51.0.1). Avec Safari, Chrome cela fonctionne tant sur mac que PC, mais avec Firefox rien à faire tant sur mac que sur PC.

    Si quelqu’un a une solution je suis preneur. Merci et bonne soirée.

    smalto

    1. Bonjour,

      Concernant le problème lié au champ du bon de réduction, dans votre cas il semble que cela pourrait-être lié à un problème du template (disposition / présentation des champs).

      Pour vous en assurer, vous pouvez toujours essayer de passer sur le thème standard pour faire le test ou de faire une demande à l’auteur du thème.

      Merci pour votre visite !

  11. Bonjour,

    Presque 20 minutes pour comprendre un truc tout bête….
    (Prestashop 1.6.1.6)
    Je ne comprenais pas pourquoi dans la page « mon compte » je n’avais pas de bouton « mes bons de réduc » alors que j’avais importé énormément de règle panier (migration 1.5 -> 1.6).
    Dans « my-account.tpl », la variable ‘voucherAllowed’ => (int)CartRule::isFeatureActive(), était à FALSE.

    MAIS Où PEUT-ON ACTIVER L’OPTION DES RÈGLES PANIERS ???!!

    En fait, tant qu’on a pas ajouté de règle panier via le BackOffice (ou via du code) , la variable « PS_CART_RULE_FEATURE_ACTIVE » reste à 0 en base de données (table « configuration »).

    A la fin de la fonction « add() » de la classe CartRule :
    Configuration::updateGlobalValue(‘PS_CART_RULE_FEATURE_ACTIVE’, ‘1’);

    voilà voilà -___-

    1. Bonjour,

      Effectivement j’ai déjà vu des variantes avec « PS_CART_RULE_FEATURE_ACTIVE » à mon sens c’est le genre de variable qui ne devrait pas exister, il serait plus sage de compter directement les éléments présents en base de données.

      Heureusement que vous avez pu trouver la cause du problème encore rapidement, parfois on peut tourner en rond un bon moment.

      Bonne continuation !

  12. Merci beaucoup pour l’astuce !
    C’est toujours le cas sur 1.6.1.15

    Je n’ai fait que commenter la ligne relative a One page checkout dans paypal.js …

    Et en effet j’ai déjà fait des tests avec Express checkout sur ce compte.
    Je pense aussi à une sorte de verrou paypal …

    1. Hello,

      Je confirme, en principe dans le 99% des cas c’est le fichier paypals.js qui masque le champ du bon de réduction… j’ai jamais compris l’objectif « réel » de cette ligne.

      A bientôt !

  13. Merci pour ces astuces. Par contre, pour le cas 3 paypal, le formulaire de saisie de code promo est supprimé en JS si $paypal_authorization est définie. Je ne pense pas que le développeur ai mis ce code par hasard. N’y a-t-il pas un risque de laisser le client saisir un code alors qu’il ne devrait potentiellement pas le faire ?

    1. Bonjour,

      Jusqu’à ce jour j’applique encore régulièrement le patch du cas 3 et cela donne satisfaction (cela n’a pas perturbé le fonctionnement de Prestashop et la validation de la commande).

      A bientôt !

  14. bonjour, j ai le soucis de la case code promo non visible, j avais le soucis au début a cause de paypal, j avais suivi le tuto et cela avait fonctionné, mais la il ne s affiche plus , j ai désactive le module paypal et idem, j ai vérifié les fichiers si le code était a nouveau changé mais non, j ai essayé de le de greffé du header toujours idem, j ai parcouru le net pour trouver une solution mais en vain, je suis sous presta 1.6.5

    1. Bonjour,

      En principe c’est la méthode 3 qui corrige le problème, pensez à bien vider le cache navigateur et faire un CTRL+R sur la page pour bien que le fichier JS soit rechargé.

      A bientôt !

  15. Merci pour ce billet. Même s’il date, il reste valable. J’étais confronté au bug Paypal, résolu en modifiant le script paypal.js.
    Ca faisait un moment que j’avais ça qui trainait et dans mon cas c’était vicieux : j’utilise le module CartAbonned Pro pour relancer les clients ayant abandonné leur panier, en leur offrant une remise. J’étais étonné du très faible taux de vente que cela générait, avant de m’apercevoir qu’en fait ces clients potentiels, lorsqu’ils revenait pour profiter de l’offre, ne pouvaient souvent pas rentrer le code. J’imagine la frustration et l’envie d’abandon définitif de l’envie d’achat… 🙂
    Et ils devaient être nombreux à être allé jusqu’à la page Paypal et à ne pas donner suite.
    Crdtl
    Franck
    http://www.sitolog.com

    1. Hello,

      Ahaha ce bug est un très grand classique, mais il faut parfois un moment avant de s’en apercevoir. En tout cas je suis content si cela a pu t’aider à résoudre le problème.

      A bientôt !

  16. Bonjour Webbax,

    merci pour ton post datant quand même de 2014 pour un problème de 2018.
    C’est aberrant pour un problème connu que les mises à jour prestashop ou paypal n’est pas pu résoudre ce problème.

    Pour moi c’est la solution 3 qui m’a aidé à resoudre mon probléme.

    Un grand merci
    cordialement,

    Halim

    1. Hello,

      Je pense que c’est une réelle volonté de Prestashop de maintenir ce code, mais celui-ci génère de l’incompréhension auprès des marchands. J’applique régulièrement le point 3 sur les boutiques de mes clients.

      Merci pour votre visite !

  17. Bonjour,
    très bon tuto, merci,
    j’ai dû aller jusqu’à l’étape 3…
    par contre, ma boutique est en PS 1.6.1.12 et les deux fichiers indiqués en étape 3 n’existent pas. J’ai modifié le fichier /www/modules/paypal/views/js/paypal.js
    Bonne journée

  18. Bonjour,

    Merci pour ces explications super précises.

    Malheureusement pour moi, j’ai le problème sous la version 1.6.0.9 et malgré les 3 solutions, il ne me propose toujours pas le champs pour encoder le code promo.

    Quelqu’un aurait-il une autre piste?

    Merci beaucoup.

Laisser un commentaire

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