[PrestaShop 1.7] Afficher le prix HT et TTC sur la fiche produit
Cette demande revient assez souvent sur le forum PrestaShop il me semble donc légitime d'en faire un tutoriel durable.
Je ne sais pas si je ferais une version pour PrestaShop 1.6 et Thirtybees, mais là nous ne parlerons que de la version 1.7 de PrestaShop.
Situation de départ
Au départ, était la vie ... pardon, je m'égare.
Au départ, sur la fiche produit de Prestashop on a soit l'affichage TTC, soit l'affichage HT en fonction de la configuration de chaque groupe client. Dans certains cas, on peut être amené à vouloir afficher les deux prix sur la fiche produit, je vais donc vous montrer simplement comment afficher simplement le montant HT en plus du montant TTC.
Affichons le HT sur avec le TTC
Sur PrestaShop, cela est très simple, il suffit de modifier légèrement un petit fichier de votre template.
Je travaille, il va de soi, sur le template Classic livré de base avec toutes les installations de PrestaShop. Si vous utilisez un template personnalisé, vous devrez certainement adapter à votre sauce.
Donc, rendez-vous dans le fichier :
/themes/classic/templates/catalog/_partials/product-prices.tpl
Au niveau de la ligne 68 (on a eu chaud), vous devriez trouver ce bout de code :
Nous constatons que ce prix ne s'affiche que lorsque la valeur de $priceDisplay
est égale à 2, sauf que cela n'arrive jamais où je n'ai pas encore trouvé, n'hésitez pas à m'en parler dans les commentaires.
Il suffit donc de changer la règle pour faire apparaitre cet élément sur la fiche produit.
Sachant qu'il serait aberrant d'afficher cet élément si la règle appliquée au groupe client est déjà d'afficher les prix en hors taxes, nous devons donc faire correspondre cette règle à l'affichage TTC seulement.
Pour cela j'ai regardé dans le code de PrestaShop lors du choix du format dans la page de configuration des groupes clients et cette valeur est 1 pour l'affichage TTC.
Remplaçons donc $priceDisplay == 2
par $priceDisplay != 1
.
Je fais le choix de faire un affichage lorsque la valeur de $priceDisplay
est différente de 1 pour lui permettre d'inclure le fait que ce résultat puisse être égal à 2 même si je ne sais pas si cela peut arriver.
Nous obtenons ce code :
qui provoque ce résultat sur la fiche produit :
Nous avons bien le montant TTC et HT d'affiché, mais vous constaterez que le montant HT se place bizarrement et ne comporte ni décimale, ni devise.
Mais ce n'est pas tout, regardez le résultat lorsque l'on change de devise ou si on a enregistré ses prix en TTC lors de la création de la fiche produit :
Vous constatez que nous n'avons toujours pas la devise et qu'en plus nous avons les 6 décimales de base.
Nous allons donc travailler à présenter convenablement ce tarif et le placer comme il faut sur la fiche produit.
La version plus
Nous allons travailler en 2 temps, le premier pour afficher le prix avec la devise et le bon nombre de décimale en fonction de la configuration de la devise (que l'on peut de nouveau configurer dans les versions 1.7.7.0 et supérieures), puis dans un second temps regarder où déplacer l'affichage du prix pour rendre cela plus cohérent.
Prix et devise
nous allons traiter la variable $product.price_tax_exc pour l'afficher avec le bon nombre de décimale et la bonne devise, celle affichée par le client.
Pour cela il existe une fonction disponible dans la classe Tools
que nous pouvons appeler directement puisque c'est une fonction définie comme static
.
Nous obtenons donc ce résultat : Tools::displayPrice($product.price_tax_exc)
Vous remarquerez que nous n'avons pas besoin de définir le nombre de décimale ou la devise utilisée, cela se fait automatiquement en fonction de la configuration de votre site, donc l'affichage sera toujours bon, quelle que soit la devise ou le groupe client.
Le code final d'ajout de la devise sera donc :
Ce qui nous permet d'obtenir le résultat suivant sur la fiche produit :
Avouez que le résultat est tout de même plus sympathique.
Nouvel emplacement
Pour déplacer ce prix HT, il vous suffit de déplacer l'intégralité du block
à l'endroit souhaitez, mais de préférence à l'extérieur d'un autre block
présent sur la même page.
Personnellement, j'aime bien le placer au-dessus du prix TTC actuellement affiché.
Qu'en pensez-vous ?
Conclusion
Comme nous l'avons encore expérimenté, la réponse à la question de départ est très simple, mais pour obtenir un résultat réellement utilisable j'ai dû intégrer des notions plus complexes que l'on ne peut acquérir qu'en pratiquant régulièrement le développement sur PrestaShop.
Pour découvrir ce souci de décimale, j'ai eu la chance de travailler sur mon module de gestion de TVA anglaise dans le cadre du Brexit juste avant, sinon, je serais certainement passé à côté de ce problème, donc soyez indulgent avec vos prestataires qui peuvent toujours oublier un cas très particulier tellement il y a de choses à maitriser.
Je vous laisse le plaisir d'adapter le design du prix à votre template, ce n'est pas le propos de cet article.
Discussions