Astuces et tips techniques pour Prestashop 1.6 (CMS e-commerce)

Mathieu Chartier CMS (WordPress...) 18 commentaires

Prestashop est un CMS e-commerce français et gratuit qui rencontre un franc succès auprès des internautes et des développeurs depuis plusieurs années. Actuellement en version 1.6 (et des poussières), l’outil a connu moult évolutions pour arriver à se faire une place de choix dans la liste des systèmes de gestion de boutiques en ligne. Actuellement 7e CMS mondial selon le classement W3Techs de janvier 2015 et 2e CMS e-commerce derrière Magento, il faut bien avouer que la France n’a pas à avoir honte sur ce plan précis…

Logo Prestashop 1.5 et 1.6

Etant moi-même un fervent défenseur de Prestashop, je me dis qu’il pourrait être intéressant que je rédige enfin un petit article technique pour donner des astuces (ou « tips » pour les anglophones avertis ^^) et surtout contrer un des principaux inconvénients de ce CMS : sa documentation.

La bataille de l’e-commerce : Magento VS Prestashop

Ayant oscillé pendant plusieurs mois entre Magento et Prestashop, j’avoue qu’aucun des deux ne m’a comblé à 100%, mais ils ont vraiment leurs propres atouts et faiblesses, ce qui explique certainement cette bataille de parts de marché dans le monde.

Sans rentrer dans les détails théoriques, j’aimerais faire un petit topo sur les aspects techniques de ces CMS. D’un côté, nous avons Magento qui est un peu la « rolls » sur le plan du code, avec des fichiers bien pensés et bien conçus, mais qui ne sont pas à la portée du premier venu lorsqu’il faut aller dans les méandres de l’outil (il a l’inconvénient d’être très lourd et complexe à maîtriser pour les débutants…). De l’autre côté, nous avons Prestashop avec sa programmation orientée objet en MVC plutôt bien foutue et son système de « templates » fait de fichiers .tpl basés sur le framework PHP Smarty.

Logo Smarty - Framework PHP utilisé dans Prestashop

En soi, les deux solutions d’e-commerce offrent de bonnes dispositions pour travailler, et pour les développeurs aguerris, il suffit de bien observer les méthodes de conception pour trouver des repères et avancer. Cela étant dit, je ne vous cache pas que les phases d’intégration ou de développement imposent parfois des arrachages de cheveux tant la clarté et l’évidence de certains points ne sautent pas aux yeux au premier abord.

Prestashop et sa documentation famélique…

Ceux qui savent comment je travaille savent à quel point je peux être tatillon voire « chiant » lorsqu’il s’agit de programmation web (j’ai le don pour me mettre en valeur, non ? ^^). J’aime que les choses soient claires et bien expliquées car c’est la base de la réussite et de la durée de vie d’un programme… C’est malheureusement une des limites de ces outils car leurs documentations sont très incomplètes.

Quand on utilise un CMS comme WordPress, le Codex (ensemble des morceaux de codes de la solution) est complet, fourni et précis, avec de nombreux exemples et des liaisons avec toutes les fonctions intéressantes.

Le premier souci de Prestashop est dû à l’utilisation de Smarty, qui certes a des aspects intéressants, mais qui oblige tout développeur à « réapprendre » PHP pour que les morceaux de code fonctionnent avec Prestashop.

Qui plus est, il faut déjà savoir que chaque version du CMS impose des méthodes de programmation différentes (bien que ce soit moins le cas entre les versions 1.5 et 1.6 notamment), il faut donc se référer à la documentation correspondante, en espérant que les réponses techniques soient présentes. Autant le dire tout de suite, ce n’est pas le cas, et les quelques livres que j’ai pu consulter sur le sujet sont du même acabit.

Logo documentation Prestashop 1.6

En d’autres termes, la documentation répond très bien sur les aspects théoriques (pour savoir comment gérer les produits, les clients, les commandes, les déclinaisons…) mais sur le plan technique, les informations sont très peu nombreuses et incomplètes, il faut donc chercher, encore et toujours, pour trouver (si possible) des réponses. Autre souci, il manque cruellement de données sur la hiérarchie des fichiers manquent pour savoir s’il est possible de faire telle ou telle chose dans une page précise, etc.

Prenons un exemple simple. Si nous voulons afficher le titre d’une page statique dans WordPress, nous allons dans le Codex et il est écrit nettement « <?php the_title(); ?> ». Tout simple, mais terriblement efficace. L’équivalent Prestashop des pages statiques correspond aux pages « CMS », et si vous voulez un code équivalent, la documentation ne vous aidera pas beaucoup. En effet, il faudra vous rendre dans le thème par défaut, ouvrir le fichier cms.tpl et découvrir que « {$cms_category->name} » affiche cette information.

J’admets que je n’ai pas mis trois heures à trouver cette réponse mais il serait bien plus « vendeur » pour Prestashop d’avoir une documentation fournie. Celle de la version 1.5 est la plus complète et donne tout de même de nombreuses réponses classiques, mais si vous cherchez des techniques avancées, passez votre chemin…

Je terminerai ma phase critique par la conception des templates. Les thèmes graphiques constituent la base des boutiques en ligne mais le mélange Smarty, Bootstrap, et méconnaissance des « codes Prestashop » impose quasiment de partir du thème par défaut, ce qui explique pourquoi la grande majorité des interfaces graphiques sont approchantes dans les grandes lignes. Créer un thème complet « à nu » est presque impossible ou demande un temps fou tant il faudra parfois « deviner » les morceaux de codes à intégrer pour faire fonctionner certains outils.

Je tiens à préciser que je reste un fan de ce CMS de création de boutiques en ligne, ces quelques défauts sont largement comblés par ses nombreuses qualités, mais je me dois d’être juste et donc de mettre en avant les lacunes évidentes sur le plan technique.

Et alors, elles viennent ces astuces sur Prestashop ?

Je cause, je cause, mais j’en ai presque oublié que l’objectif de l’article est de vous donner des astuces techniques pour Prestashop. Excusez-moi, je m’étais emporté dans ma folie aimante autour du CMS e-commerce à la française. :D

Je rédigerai sûrement à l’avenir des articles pour expliquer comment concevoir un module pour Prestashop 1.5 ou 1.6 mais pour le moment, je tiens juste à répondre à certaines questions que je me suis posé lorsque je concevais des boutiques en ligne. Voici donc un récapitulatif des petites astuces à retenir si comme moi, vous cherchez désespérément certaines réponses…

Côté module (fichier en PHP objet naturel)

Récupérer la liste des catégories et sous-catégories d’une boutique Prestashop

Vous pouvez notamment récupérer les catégories dans une liste déroulante si besoin en faisant comme ceci (ou en adaptant ce code) :

Récupération de toutes les déclinaisons existantes dans Prestashop

Dans Prestashop, il faut savoir que les déclinaisons ont des identifiants uniques différents de ceux des produits. De nombreuses tables de la base de données tournent autour des produits et des déclinaisons à tel point qu’il est simple de se perdre. Il est important pouvoir trouver les groupes de déclinaisons pour chaque produit, etc.

Récupérer le nombre total de produits d’une catégorie dans Prestashop

Récupérer tous les produits d’une catégorie de boutique Prestashop

Pour compléter ce que nous avons vu précédemment, nous pouvons ajouter cette ligne de code pour récupérer la liste complète des produits d’une catégorie.

Récupération la liste des déclinaisons de produits dans Prestashop

Une fois encore, pour compléter ce qui a été dit antérieurement, nous pouvons récupérer les déclinaisons de chaque produit dans un tableau afin d’obtenir leur identifiant propre (id_product_attribute dans la base) ou autre information.

Voici la liste des astuces qui m’ont manqué lorsque je concevais un module Prestashop récemment, ce qui m’a valu quelques phases de recherche avancée. Si nous observons bien, nous pouvons noter que toutes les fonctions sont des « getters » en PHP objet, c’est-à-dire des méthodes précises qui ont des fonctionnalités précises sous la forme « get…() ».

Mon reproche vient du fait que cette liste de méthodes n’est pas disponible directement via Prestashop (ou sinon elle est très bien cachée…) et que certaines de ces méthodes ne donnent pas les résultats escomptés (d’où la création de la fonction recurseCategoryPerso ici). Il faut donc parfois aller chercher la fonction dans les « controllers » de Prestashop puis les réécrire à notre sauce, j’ai connu plus ergonomique et efficient pour cela… :-(

Côté template (fichier TPL)

Ajouter un second bouton « ajouter au panier » dans un page produit de Prestashop

Il existe plusieurs variantes pour faire cela, mais sachez que généralement, c’est la « class CSS » utilisée qui active en Javascript la fonction Ajax d’ajout au panier, il faut donc faire attention pour ne pas entrainer de confusions entre les différents boutons « Ajouter au panier ».

Je vous montre un exemple de bouton que j’ai créé pour un site web (dont le titre change dynamiquement en jQuery en fonction du produit sélectionné).

Bouton personnalisé d'ajout au panier (Prestashop)

Côté HTML

Côté CSS

Dans cet exemple, le bouton est créé à la main et utilise la fonction ajaxCart.add() en jQuery propre à l’ajout de produits au panier de Prestashop. Tout est récupéré avec l’ID du bouton.

Nous aurions pu ajouter un bouton pour ajouter deux produits en même temps par exemple en choisissant la bonne class ou le bon ID en CSS pour le bouton, comme ceci :

Ici, c’est « add_to_cart » couplé au type « submit » qui permet l’ajout au panier en Ajax. Dans ce cas, si deux produits sont sélectionnés dans les règles de l’art, ils seront ajoutés en même temps au panier (ce qui peut être pratique dans certains cas).

J’espère que certaines astuces vous auront plu et j’espère en proposer d’autres à l’avenir car la faiblesse de la documentation de Prestashop doit être comblée par la communauté pour apporter vraiment à ce bon CMS ce qu’il mérite, et pourquoi pas grappiller quelques parts de marché… :D

18 commentaires

  • Perso, je préfère largement utiliser Magento que PrestaShop. Ce dernier est certes très pratique pour les site e-commerces, mais la prise en main est peu maniable au vue de sa documentation pauvre en contenu. Mais merci pour ces conseils, dernièrement j'ai dû m'y remettre (j'épluche les articles sur PrestaShop) et certaines configs m'échappent encore un peu !

    • Votre raisonnement se tient, Magento a aussi de très grosses qualités donc il mérite son succès. Disons que je défends la "French touch" avec Prestashop, mais comme vous le voyez dans l'article, je ne suis pas forcément tendre avec ses lacunes. :D

  • Aujourd'hui, pas mal de propriétaires de site ainsi que ceux qui envisagent de créer une activité de commerce en ligne utilisent prestashop. C'est devenu une référence.
    Ces astuces et conseils ne seront pas de refus. C'est sûr et certain!
    Bonne continuation!

  • Franchement, Prestashop est un excellent outil e-commerce que plusieurs personnes utilisent vue qu'il est simple,facile et idéal pour bien gérer les ventes d'une boutique malgré que Magento est efficace également mais bon j'opte toujours pour PrestaShop.Merci pour les astuces.

  • Dujardin dit :

    Bonjour,

    Je souhaite permettre aux clients d'ajouter un commentaire, obligatoire ou non, au panier avant de valider.
    Mais je ne trouve pas la table (dans Bdd) dans laquelle ajouter ce champ.
    Avez vous une idée ?

    Merci !

    • Bonjour,
      Il y a les tables classiques des commentaires et avis ('product_comment', etc.) mais si vous souhaitez ajouter votre propre système avec des commentaires "à part", peut-être est-il plus intéressant de créer une autre table dédiée et adaptée à vos besoins, non ?

  • gok dit :

    Bonjour,

    Le site prestashop 1.5.6.1 dont je m'occupe n'a pas d'animation lorsqu'on ajoute un produit au panier.
    Je m'explique...
    Sur une version d'origine, dans une fiche produit, lorsqu'on clique sur "Ajouter au panier", cela déplace la photo du produit vers le Panier et on reste sur la fiche produit.
    Dans mon cas, cliquer sur "Ajouter au panier" ne produit aucune animation et nous amène directement dans le Panier avec le produit ajouté.
    Aussi j'ai remarqué, lorsqu'on passe la souris sur l"icone du Panier, cela doit afficher le contenu de celui-ci mais pas sur mon site...
    Sachant que vous maîtrisez bien le sujet, avez-vous une idée afin de rester sur la fiche produit et réactiver l'animation par défaut ?

    ps: le module Bloc Panier est bien activé.

    Merci !

    • Hum, j'ai l'impression que vous n'utilisez pas le panier Ajax mais le panier classique, d'où la disparition de l'animation, etc. Il faudrait regarder du côté des paramètres de Prestashop...

  • gok dit :

    Bonjour,

    Côté paramètres Prestashop, on est tout bon (à priori).
    Module BlocPanier Ajax activé...
    Un fichier à modifier ?

    Merci

    • Dans ce cas cela signifie que ce sont les fichiers du thème qui n'utilisent pas le panier Ajax, mais là, c'est une autre histoire. Le mieux est que vous regardiez le module blockcart du thème par défaut (qui utilise Ajax en panier) pour comparer et solutionner, je n'ai plus les fonctions de tête sincèrement... :(

  • Tarik dit :

    Le problème avec prestashop c'est qu'il pauvre en commuté (il plus de problème que de solution sur les forum), aussi tout ces module sont payent et il y a pas d'astuces ni de formation en ligne pour apprendre à créer un module et l’installation des tamplates premium peut s’avérer difficile par fois .
    En revanche c'est template sont moins chère que ce de magento.

    • Pour avoir utiliser Magento à ses débuts (version 1.0), je peux garantir que c'est une vraie usine à gaz. Certes c'est très bien codé mais il faut vraiment rentrer dedans pour appréhender l'outil avec précision et certitude. Prestashop me semble plus accessible mais la documentation est famélique, les renseignements ou les exemples inexistants, etc.
      La communauté est large mais en réalité, peu de développeurs maîtrisent réellement le code de Prestashop (à proportion du nombre de développeurs qui travaillent avec ce CMS, et moi y compris !) car il est obscur. C'est d'ailleurs pour cette raison que peu de modules existent, que peu d'entre eux sont bien réalisés et que beaucoup sont payants (la rareté permet de vendre plus cher, etc.).

  • Michel dit :

    hello

    moi je cherche comment afficher le nombre total de produits disponible à la vente dans le catalogue sur la page d'accueil.
    c'est idiot mais personne n'a publié qq chose là-dessus qui fonctionne.
    Si une âme charitable à une idée et une explication claire, je lui met un cierge :)
    Prestashop 1.6.14

  • pas important dit :

    Critiquer, critiquer en permanence, c'est facile.... pour quelque chose qui est donné gratuitement. Misère, ce n'est pas parfait, quelle honte. L'ingratitude des médiocres.
    Je suis PDG de plusieurs start-up et je préfère rester discret, il est inutile de publier ce papier. Je dois dire qu'en quelques années, ma réussite dans les affaires a été très rapide, sans connaître un bout de code, qui n'a, à mon sens aucun intérêt. Je remercie le Dieu Prestashop tous les matins de m'avoir amené sur un plateau une technologie que différentes sociétés de rigolos me proposaient à 100, voire 200k€ avec le discours de la complexité incroyable de ces technologies.... discours bien connu d'ingénieurs frustrés se dégageant à peine un smig... Je remercie ces développeurs et leurs docs incomplète que je liraient jamais, de me permettre de gagner des salaires à 6 chiffres sans trop travailler..

    Il faut prendre tout ce que l'on nous donne et au lieu de critiquer, pensant être une référence en ayant ce droit, remercier prestashop au contraire, WordPress et tous les produits gratuits qui vous font vivre, enfin je l'espère.
    Quand aux neuneus qui se plaignent en permanence que les "communautés ne vivent pas" mais reste coincés chez eux attendant que les réponses viennent toutes seules sans forcément participer eux même, on les retrouvent à faire des blogs en cherchant à se donner une impression d'exister par la critique, car c'est bien la seul chose qu'ils maitrisent.

    Alors soit il y a un nombre incroyable d'abrutis sur cette planète pour continuer de bâtir des sites avec cette techno sans rien y comprendre, soit les gens sont un minimum compétent pour y construire des sociétés rentables... où vous mettez-vous ? Pas dans ceux qui sont capables de créer ces sociétés, sinon, ce blog sur lequel je perd mon temps avant d'aller faire mon footing n'existerait pas, ce que semble préciser votre rubrique "a propos..." : Ce blog est le résultat de plusieurs années de travail et d'apprentissage, mais il ne fait pas manger son homme....
    sans blague...

    rester humble, c'est aussi savoir se la fermer, ce qui d'une certaine façon, remercie les génies qui produisent de la valeur ajoutée et font avancer l'humanité.

    • Ce que vous oubliez, c'est que les développeurs et ingénieurs comme nous ont créé ces outils, qui vous font manger... Nous sommes justement en droit de critiquer ce que nous connaissons car nous y contribuons. Il m'arrive de critiquer WordPress mais j'ai aussi contribué en créant gratuitement 6 extensions à ce jour ainsi que des codes fournis librement. N'oubliez pas que si nous, développeurs et webmarketers, nous ne donnions pas ce type de produits gratuitement (ou pour un magnifique SMIC comme vous le dîtes), votre business se résumerait à du vide...

      Rester humble n'a donc rien à voir là-dedans. La documentation de Prestashop est pourrie, et pourtant, je défends Prestashop parce qu'il s'agit d'un bon outil, et français. Je contribue à Prestashop en aidant des gens et en créant des extensions gratuites également. Offrez-vous vos produits à vos clients ? Non, il ne me semble pas... Vous êtes juste un opportuniste qui fait du fric sur la gratuité des gens que vous critiquez. Je vous invite à vous regarder dans un miroir, le reflet pourrait vous faire mal.

      Le fameux blog sur lequel vous perdez votre temps est un blog "gratuit", j'écris 2/3 articles par jour, donc du temps offert. Qu'offrez-vous de votre temps, à part être hautain et vous croire au-dessus des gens qui vous ont fait ? Vous êtes un pseudo-businessman qui est capable de prendre des outils gratuits codés par des mecs et des blogueurs comme moi que vous critiquez, mais sans nous, vous ne seriez rien. Après tout, votre courage se limite à écrire un commentaire dénué d'humilité de manière anonyme, vous m'avez l'air tellement exemplaire... :D

    • Rémi dit :

      Mon dieu, mais quelle tristesse !!! Je n'ai pas l'habitude de commenter Mathieu mais la ça me démange le bout des doigts.
      Je ne sais pas comment ce soit disant "patron de plusieurs start-up" en est arrivé à publier cette merde.
      Déglinguer un blog c'est facile, écrire plusieurs articles de qualités par jour je pense que ça l'est un peu moins, c'est grâce à des gens comme Mathieu que nous véhiculons une certaine passion commune à travers les différents outils et domaines traités, un partage de l'information gratuitement, ainsi qu'une entraide. C'est ce genre de personnes qui nous font aimés encore plus le web.
      Ils permettent de l'améliorer et de le faire avancer à travers une véritable ressources d'informations ! Le but n'est pas toujours de gagner de l'argent mais plutôt de véhiculer sa passion, il y a encore en 2015 sur Terre des gens qui ne pensent pas qu'au fric (si si je vous assure) mais apparemment vous n'êtes pas au courant...

      Alors, derrière votre petit écran et votre anonymat, votre salaire à 6 chiffres, votre salaire sans trop de travail, retournez donc faire votre footing, c'est peut être le domaine où vous êtes le plus compétent... On se croisera peut être un jour hein !
      En tout cas, la critique sur les blogs ce n'est pas pour vous...

    • l'imparfait dit :

      Bonjour,
      Je viens de lire le message de "Pas important"... avec un certain retard vu la date de dépôt de ce poste.
      Il me semble comprendre ce dont il parle. Les solutions que les codeurs apportent au travers de leur travail, notamment en créant des systèmes "gratuits" ou "open sources", sont bénéfiques à des entrepreneurs qui profitent des fonctionnalités et du génie des prestataires qui ne sont pas tous visibles mais donc le travail est excellent. Cette réflexion n'est pas tournée contre les "codeurs-bloggeurs" mais sur les critiques négatives que l'on peut lire. La comparaison entre des systèmes ne s'arrête pas à des avis personnels et des prises de positions d'un savoir-faire à sens unique.
      Ce billet de "pas important" rappelle simplement que des entreprises telles que Prestashop permettent à des gens comme nous d'exister et nous permet de pousser plus loin nos réflexions commerciales sans pour autant être à la merci d'esprits rotors ou débiles n'ayant pas compris le sens de l'échange humain (je ne parle pas de "socialisme"). Blog ou bloque?
      À nos yeux, et du moins les miens, l'expérience humaine et commerciale (aussi sur le web) n'est possible que grâce aux développements de codeurs "téméraires" et intelligents qui ont compris qu'une bonne base vaut mieux que cent critiques.
      Mieux que si, mieux que ça.. moi je trouve que si ou que ça ne fait pas avancer ce monde.
      Et en deux mots il serait peut-être mieux de s'adonner à un site communautaire du type: aidons-les-développeurs-prestashop-à-être-encore-plus-performants" sans critiques négatives ou contraintes que de blâmer ceux que l'on ne pourrait imiter. La perfection n'étant pas de ce monde, l'imperfection d'un script est logique car humaine à la source. Que les parfaits se contentent d'eux-mêmes et nous laissent apprécier le travail des imparfaits à leur juste mesure.

  • Dombret dit :

    Bonjour, il existe un tout nouveau module qui distingue Prestashop de Magento. En effet il permet de créer des pages cms/description produit de qualité avec des animations, du parallax, des carousels... Sans toucher un ligne de code... C'est exclusivement sur Prestashop. De belles descriptions rassurent et peuvent déclencher un coup de coeur pour un produit. Connaissez vous LyoPageEditor ?

  • Déposer un commentaire

    L'adresse de messagerie ne sera pas publiée.* Champs obligatoires