Prestashop

Logo PrestashopPrestashop est une solution e-commerce facile et pratique à mettre en œuvre.
C’est également une plateforme sur laquelle je travaille quotidiennement depuis presque 10 ans.
A travers une centaines d’articles écrits durant cette période, j’ai creusé de nombreuses problématiques liées à cette solution, des versions 1.4.x jusqu’aux dernières versions 1.7
J’ai également partagé des canevas de modules et creusé des points spécifiques de la solution, essentiellement une vision orientée module ( ç’est à dire comment interagir le plus simplement avec Prestashop via un module )

Prestashop : Boostez vos connaissances avec le livre Développez avec Php pour Prestashop

Une fois n’est pas coutume ce n’est pas un article technique, mais de présentation d’une superbe ressource sur Prestashop qui vient de sortir.
Le livre « Développez avec Php pour Prestashop » est une vrai bible sur la solution Prestashop qui va présenter un peu près tout ce qui est possible de savoir sur la solution 🙂

  • Architecture du système prestashop
  • Fonctionnalité de bases
  • Personnalisation de la solution à travers les modules
  • Gestion des thèmes

Ce livre est écrit par Jonathan Danse qui est un expert reconnu dans l’écosystème de Prestashop et qui travaille avec la solution depuis 2010 ( ça fait quelques années de connaissances accumulées 😀 )
Je conseille ce bouquin à tous les développeurs Prestashop confirmés ou non, pour ma part j’ai appris pas mal de notions que j’ignorais malgré mes longues années de travail sur Prestashop également.

Vous pouvez acheter le livre ici : https://www.editions-eni.fr/livre/developpez-avec-php-pour-prestashop-architecture-personnalisation-themes-et-conception-de-modules-9782409038600

PS : Je précise que ce n’est absolument pas un lien d’affiliation je ne gagne rien à partager ce lien, mais c’est une ressource qui mérite d’être connue 😉
Je présenterais prochainement un autre ouvrage sur le sujet, dans lequel je suis un peu plus impliqué 🙂…

Prestashop : Ajouter une règle de validation sur un champ du formulaire de création de compte

Ça fait quelques temps que je n’avais pas publié de tutoriel générique sur Prestashop, mais celui-ci est parti du besoin suivant :

Sur ma boutique sur laquelle je propose des modules ( gratuit ) en téléchargement , j’ai pas mal d’emails fantaisistes pour les clients qui s’inscrivent.
Hors comme les modules sont ensuite envoyés par email, si celui du client ne correspond à rien aucune chance qu’il arrive au destinataire :/
Je souhaitais donc rajouter une règle de validation supplémentaire, pour ne pas autoriser les domaines emails  : test.com, example.com …

Attention ce tutoriel s’applique si vous souhaitez ajouter des règles de validation sur les champs standards du formulaire de création de compte :

  • Civilité
  • Prénom
  • Nom
  • Email
  • Mot de passe
  • Date de naissance

Pour l’ajout de vos propres champs vous pouvez regarder le tutoriel ici : https://www.h-hennes.fr/blog/2017/10/10/prestashop-1-7-ajouter-des-champs-clients/

Champs standards du formulaire de création de compte

Analyse et identification de la procédure

Pour ajouter cette validation on va faire un module qui va utiliser le hook additionalCustomerFormFields
Qui contrairement à ce que son nom laisse penser, permets également de modifier les champs actuels du formulaire.…

Prestashop : Ajouter un captcha sur les formulaires de vos modules

Afin d’éviter le spam sur vos différents formulaires je recommande en général la mise en place d’un captcha.
Ça fait plusieurs années que j’édite un module de captcha gratuit ( eicaptcha ) qui permets de l’éviter sur les formulaires suivants :

  • Formulaire de contact
  • Formulaire de création de compte
  • Formulaire d’inscription à la newsletter

Celui-ci est disponible sur github et a été téléchargé des dizaines de milliers de fois : https://github.com/nenes25/eicaptcha

Je viens de sortir une nouvelle version de ce module ( 2.4.0 ) qui rajoute une nouvelle fonctionnalité qui permets d’utiliser la vérification du captcha intégrée dans le module directement dans vos modules spécifiques.

Ceci à travers 2 nouvelles méthodes :

hookDisplayEicaptchaVerification : permets de récupérer un template d’affichage complet du captcha ( le captcha s’affiche directement )
hookActionGetEicaptchaParams : permets  de récupérer les paramètres nécessaires à l’affichage du captcha ( il est possible de faire un affichage spécifique )

Nous allons voir à travers cet article comment le mettre en place à travers la création d’un module hhcustomform
Le captcha sera implémenté dans 2 situations

  • Dans un formulaire sur la fiche produit
  • Dans un controller front

Captcha dans un formulaire sur la fiche produit

Pour afficher un formulaire sur la fiche produit nous allons utiliser le hook displayProductExtraContent qui va nous permettre de l’afficher comme sur la capture ci-dessous, directement dans les onglets de la fiche produit.…

Prestashop : Améliorer la sécurité de votre site avec les csp

Les Content Security Policies ( CSP ) vous permettent d’améliorer la sécurité de votre site web et d’éviter les injections de contenus externes.
J’avais déjà fait un article sur leur utilité il y’a quelques années dans le cadre du passage au https : Détecter vos contenus mixtes avec les CSP
Je ne vais pas parapher plus en détails leurs fonctionnement car il existe de très bonnes ressources sur le sujet :

https://developer.mozilla.org/fr/docs/Web/HTTP/CSP (FR)
https://content-security-policy.com/ (EN)

Il est important de noter tout de même qu’il existe plusieurs modes de CSP avec des noms assez explicites :
Content-Security-Policy : Le fonctionnement normal
Content-Security-Policy-Report-Only : Fonctionnement « Debug » qui permets de récupérer les erreurs et avertissements en vue d’une correction.

Implémentation dans Prestashop

Pour l’implémenter dans Prestashop nous allons définir les CSP via un header http que nous pourrons définir directement en php
Pour cela il est possible d’utiliser le hook ActionControllerInitBefore qui est appelé assez tôt dans le workflow de l’ensemble des controllers ( Front / Back )
Voici comment je l’ai implémenté :

/**
     * Avant l'initialisation du controller on va définir les CSP
     * @param array $params
     * @return void
     * @throws PrestaShopException
     */
    public function hookActionControllerInitBefore(array $params): void
    {
        if (Configuration::get($this->configPrefix .

Prestashop : Filtrer les emails de produits hors stocks

Dans Prestashop il est possible d’être notifié lorsque des commandes sont passées sur des produits qui ne sont bientôt plus en stock.
Ce paramétrage est accessible depuis l’administration sur chaque fiche produit en cochant la case « M’envoyer un email quand la quantité est en dessous ou égale à ce niveau. »

Cette fonctionnalité est très pratique pour le marchant, mais en revanche ces emails n’ont aucun intérêt pour le développeur ou l’agence qui gère le site.
C’est la ou le fonctionnement natif de Prestashop n’est pas très pratique, car pour chaque commande d’un produit avec cette option cochée, l’ensemble des utilisateurs de l’administration  avec un accès en lecture à la page des stocks vont être notifiés.

Ces derniers temps je suis spammé par ce genre d’email et j’ai donc décidé de m’attaquer au problème 🙂

Une solution simple pourrait être de retirer cet accès pour les profils administrateurs, mais ceci nécessite de créer un nouveau rôle spécial et de ne pas avoir de visualisation sur cette page en back office.…

Prestashop : Utiliser les pages cms comme des blocks

Vous souhaitez afficher des contenus éditables depuis l’administration un peu partout dans votre thème ?
C’est très facile à faire et nous allons voir comment. ( Pour un usage basique directement dans les fichiers smarty )
L’idée est d’utiliser les pages cms de Prestashop.
Pour les ranger, vous pouvez faire une catégorie cms désactivée « Blocs Cms » et mettre toutes les pages dedans.

Pour gérer l’affichage nous allons créer un module hhcmspagewidget
Et le contenu de la page de démo sera le suivant.

Fonctionnement basique

Pour un fonctionnement de base le code suivant sera suffisant

class Hhcmspagewidget extends Module implements WidgetInterface
{
 
    public function __construct()
    {
        $this->name = 'hhcmspagewidget';
        $this->tab = 'others';
        $this->version = '0.1.0';
        $this->author = 'hhennes';
        $this->bootstrap = true;
        parent::__construct();
 
        $this->displayName = $this->l('Hh Cms page widget');
        $this->description = $this->l('Allow to display cms page as block through a widget');
    }
 
 
    /**
     * [FRONT OFFICE] Widget utilisé pour afficher le bloc cms
     * @param string $hookName
     * @param array $configuration
     * @return string
     */
    public function renderWidget($hookName = null, array $configuration)
    {
        if ( isset($configuration['id_cms']) ){
            return $this->getWidgetVariables($hookName,$configuration);
        }
 
        return '';
    }
 
    /**
     * [FRONT OFFICE] Widget utilisé pour récupérer les informations d'affichage
     * @param string $hookName
     * @param array $configuration
     * @return string
     */
    public function getWidgetVariables($hookName = null, array $configuration)
    {
        try {
 
            $idCms = (int)$configuration['id_cms'];
            $cms = new CMS($idCms,$this->context->language->id);
 
            //Exécution du hook pour appliquer le filtrage des contenus cms
            if ( false !=

Prestashop: Afficher les commentaires produits dans les onglets de la fiche produit

Petit tutoriel rapide aujourd’hui sur une optimisation que j’ai voulu faire cette semaine et qui s’est avérée un peu plus embêtante que prévue.
Le besoin est relativement simple je veux déplacer le contenu des commentaires dans les onglets affichés sur la fiche produit. ( Dans un thème basé sur classic )
Les commentaires utilisent le module natif de Prestashop productcomments
L’affichage du contenu des onglets est géré par le hook displayProductExtraContent
Voici une capture du comportement avant :

Et voici une capture du comportement que je souhaite obtenir après.

Plusieurs approches techniques sont possibles pour faire cela, pour ma part j’ai choisi de le faire un module complémentaire hhproductcomments qui dépends du module natif productcomments.
Cela présente l’avantage de ne pas toucher devoir toucher ni au module natif, ni au thème pour gérer cet affichage.
L’idée est de greffer ce nouveau module sur le hook displayProductExtraContent pour gérer l’affichage en onglet et d’appeller le hook natif displayFooterProduct du module productcomments

Le gros point d’attention à avoir , c’est que la fonction hookDisplayFooterProduct attends une instance de  \PrestaShop\PrestaShop\Adapter\Presenter\Product\ProductLazyArray et non pas un instance du produit ( Product ) telle qu’on la reçoit dans le hook initial.…

Prestashop : Ajouter des champs à une catégorie

Cette article inaugure une nouvelle série d’articles à venir sur comment étendre les entités Prestashop sans surcharges.
C’est connu depuis très longtemps qu’il est déconseillé d’utiliser les surcharges pour ajouter des champs, pour autant il n’y avait pas forcément d’autres solutions, c’est de moins en moins vrai 🙂

Ce tutoriel est uniquement compatible avec les versions de Prestashop supérieures à la 1.7.6 ( Lorsque la page de gestion admin est passée sous symfony )
Mais le hook essentiel filterCategoryContent est présent depuis la version 1.7.1
La même logique avec une autre gestion dans l’administration est donc possible.

Pour l’exemple nous allons donc créer un module hh_categoryfields qui va ajouter 3 champs aux catégories :

  • Code erp , type texte commun à toutes les langues et tous les sites
  • Description SEO , type texte avec possibilité de le traduire pour chaque langue installée dans chaque boutique
  • Image : Image commune à toutes les langues et tous les sites.

 

Ajout des champs dans le formulaire d’édition admin

Pour l’ajout des champs dans le formulaire d’administration j’ai déjà détaillé le concept de fonctionnement dans l’article : https://www.h-hennes.fr/blog/2019/08/05/prestashop-1-7-ajouter-des-champs-dans-un-formulaire-dadministration/

Nouvelle fonctionnalité : Évaluez la compatibilité de l’article avec votre version de Prestashop

Constat

L’écosystème Prestashop évolue rapidement en ce moment, et sur ce blog je partage des astuces sur cette solution depuis déjà pas mal d’années.
L’information telle qu’elle est écrite au moment de la rédaction d’un article n’est du coup plus forcément vraie quelques mois ou années plus tard.

Afin de préciser les compatibilités de l’article avec telle ou telle version de Prestashop j’avais déjà mis en place dans l’entête un bloc récapitulatif des versions compatibles.
Et en complément sur les articles qui datent de plus d’un an je rajoute également un bloc avec cette information.

Je pense que c’est assez exhaustif et que cela permets déjà d’avoir une idée sur la pertinence de l’information.
En revanche le gros inconvénient c’est que je passe  devrait passer régulièrement sur l’ensemble des articles pour vérifier que l’information est toujours d’actualité.

Optimisation

A compter d’aujourd’hui les choses changent et j’ai introduis 2 nouveautés :

  • Tous les visiteurs pourront évaluer le fonctionnement des articles avec leur version de Prestashop.