Utiliser efficacement les hooks PrestaShop dans le développement de vos modules

Si vous avez passé du temps à construire Modules PrestaShopLes hooks sont probablement l’endroit où se sont déroulées la plupart de vos batailles. Ils permettent à votre module de communiquer avec le noyau, d’intégrer des fonctionnalités sans jamais modifier un fichier que vous ne devriez pas toucher. Savoir qu’ils existent est une chose. Les utiliser sans se tirer une balle dans le pied en est une autre.

Qu’est-ce qu’un crochet, au juste ?

En termes simples, un hook correspond à un moment de l’exécution de PrestaShop où le système s’interrompt pour vérifier si un module est à l’écoute. Si votre module est enregistré pour ce hook, il peut alors répondre.

Il est important de distinguer deux types de hooks : les hooks d’action et les hooks d’affichage. Les hooks d’action servent à exécuter une logique liée à un événement, comme la passation d’une commande ou l’enregistrement d’un produit. Les hooks d’affichage, quant à eux, permettent d’insérer du code HTML à des endroits précis de la boutique en ligne ou de l’interface d’administration. Cette distinction influence la manière dont vous écrivez la méthode. Les hooks d’action traitent des données et ne renvoient généralement rien de significatif. Les hooks d’affichage, eux, renvoient du code HTML rendu que PrestaShop intègre à la page.

Les erreurs des développeurs en matière d’inscription

L’erreur la plus fréquente au début est d’enregistrer les hooks au mauvais endroit ou de manière désorganisée. L’enregistrement doit se faire dans le fichier de configuration de votre module. installer() méthode via $this->registerHook()Vous pouvez transmettre un tableau de noms de hooks en un seul appel, ce qui est beaucoup plus propre que d’enchaîner des appels répétés.

Tout aussi important : désinscrivez-les dans désinstaller()Il est facile de négliger cette étape et de le regretter. Les enregistrements de hooks orphelins qui persistent dans la base de données après la suppression d’un module peuvent engendrer des comportements réellement déroutants par la suite. Un modèle propre ressemble à ceci :

public fonction installer()

{

    retourner mère::installer()

        && $ This->registerHook(['displayHeader',

           'actionOrderStatusUpdate',

           'displayFooterProduct']);

}


Choisissez correctement les noms de méthodes

PrestaShop résout les méthodes de hook par convention : hookHookName(), avec le nom du crochet en camelCase. Donc affichageEn-tête correspond à hookDisplayHeader()Si vous vous trompez dans la casse, PrestaShop ignore silencieusement votre méthode, sans erreur, sans entrée dans les journaux, rien. 

C’est le genre de bug qui peut faire perdre un temps fou à déboguer avant qu’on le repère.

Chaque méthode de crochet reçoit un $paramètres tableau. Son contenu dépend entièrement du hook qui l’a déclenché. Pendant le développement, videz le tampon. $paramètres Avant même d’écrire la moindre logique, il est conseillé de consulter la documentation. Celle-ci constitue un bon point de départ, mais elle ne reflète pas toujours les données réellement transmises.

 

Manipulation correcte des crochets d’affichage

Pour les hooks d’affichage, l’approche standard consiste à assigner des variables à Smarty et à renvoyer la sortie de $this->afficher() pointant vers un .tpl fichier. Conservez vos modèles dans vues/modèles/hook/ À l’intérieur de votre module, la structure est conventionnelle et facilite la navigation à mesure que le module s’agrandit.

Un détail qu’il convient de souligner : toujours retourner N’affichez jamais le résultat. Le système de hooks récupère les valeurs de retour et les place au bon endroit dans la mise en page. Si vous affichez directement le résultat, il se retrouvera en haut de la page, quel que soit l’emplacement du hook.

Quand les crochets intégrés ne suffisent pas

Les hooks natifs de PrestaShop offrent de nombreuses possibilités, mais dans certaines situations, notamment lors de la création de modules extensibles, il est nécessaire d’utiliser une solution plus ciblée. Vous pouvez enregistrer un hook personnalisé avec Hook::register() et tirez-le en utilisant Hook::exec() depuis n’importe où dans votre base de code.

Les hooks personnalisés sont particulièrement utiles dans les projets multi-modules. Au lieu que les modules s’appellent directement, vous exposez un hook et laissez les autres modules répondre indépendamment. Cela permet de conserver une architecture propre et de simplifier considérablement les modifications ultérieures.

Ne négligez pas l’aspect performance

Il est facile de sous-estimer les dégâts que peut causer une méthode d’hameçonnage mal optimisée. Les hameçons comme affichageEn-tête Une requête est déclenchée à chaque chargement de page. Si votre méthode accède à la base de données ou appelle une API externe sans mise en cache, la vitesse de chargement est fortement impactée – et vos clients s’en apercevront avant vous.

Quelques bonnes pratiques sont utiles. Mettez en cache tout ce qui ne change pas entre les requêtes. Utilisez le cache intégré de PrestaShop lorsque c’est pertinent. Et si votre logique de hook ne s’applique que sous certaines conditions, vérifiez ces conditions en début de méthode et quittez prématurément si elles ne sont pas remplies. Cela réduit la surcharge et rend le code plus lisible.

Quand le crochet ne fonctionne pas

Si un élément ne fonctionne pas comme prévu, vérifiez d’abord si le module est bien associé au hook. Accédez à Modules > Positions dans l’interface d’administration ou consultez directement la table des hooks dans la base de données. Il est possible qu’un module soit installé même si l’enregistrement d’un hook a échoué silencieusement lors de la configuration.

Services de développement personnalisés

Des solutions sur mesure proposées par Knowband pour votre réussite en e-commerce

Vous recherchez des solutions performantes et évolutives ? ​​Knowband propose des services de développement sur mesure réalisés par des experts pour vous aider à créer facilement des fonctionnalités e-commerce haute performance.

✔ Développement de modules personnalisés
✔ Plugins e-commerce
✔ Intégration API
✔ Optimisation des performances
✔ Intégration tierce

Il est également important de tenir compte de l’ordre d’exécution. Si un module situé plus tôt dans la chaîne génère une exception non gérée, PrestaShop peut interrompre le traitement de toutes les autres tâches liées à ce hook. Le panneau Positions permet de modifier cet ordre, et cela suffit parfois à résoudre le problème d’un hook qui disparaît mystérieusement.

A Retenir

Ce sont les crochets qui font Modules PrestaShop En réalité, elles sont modulaires. Bien utilisées, elles permettent de créer des intégrations propres qui n’empiètent pas sur le noyau ni sur les autres modules. Les principes de base sont simples : s’inscrire dans installer()Nommez vos méthodes avec précision, effectuez des retours depuis les hooks d’affichage, mettez en cache les hooks à fort trafic et utilisez des hooks personnalisés lorsque l’ensemble intégré est insuffisant.

Une fois que cela devient une habitude, le processus de développement est beaucoup plus fluide et votre code reste un élément que vous aurez envie de réutiliser ultérieurement.

At Groupe de connaissancesNotre équipe de développement travaille régulièrement avec des architectures de modules PrestaShop complexes, où l’utilisation efficace des hooks est essentielle pour la performance et l’évolutivité. Si vous souhaitez accélérer le développement ou implémenter des fonctionnalités avancées, explorer des modules et des solutions conçus par des professionnels peut vous faire gagner un temps précieux et vous épargner bien des efforts.

Comment utiliser le système de remplacement de PrestaShop sans endommager le noyau ?

Le système de remplacement de PrestaShop permet de personnaliser le comportement de base sans modifier les fichiers originaux. Cependant, mal utilisé, il crée des boutiques fragiles qui deviennent inutilisables lors des mises à jour. Ce guide de Knowband explique le fonctionnement des remplacements, quand les utiliser et trois pièges importants que tout développeur devrait connaître.

Qu’est-ce que le système de dérogation ?

PrestaShop utilise l’héritage PHP pour vous permettre de remplacer n’importe quelle classe principale par votre propre version, sans modifier les originales. Chaque classe principale possède le suffixe « Core », par exemple « ProductCore ». Si vous créez le fichier `/override/classes/Product.php` contenant une classe nommée `Product` qui étend `ProductCore`, PrestaShop chargera votre version. Il en va de même pour les contrôleurs.

Ne modifiez que les méthodes spécifiques que vous devez changer ; ne copiez jamais un fichier de classe entier. Cela permet de conserver des modifications plus concises et de réduire considérablement les risques de conflits avec les mises à jour ultérieures.

Exemple : exposer le nom du contrôleur actuel dans votre modèle d’en-tête :

Où placer vos fichiers de remplacement

Les paramètres de remplacement peuvent être stockés à deux endroits. Le répertoire global `/override/` à la racine de votre installation est actif immédiatement après la suppression du cache. Il est préférable de regrouper les paramètres de remplacement dans un module.

Placer un fichier de surcharge dans un module (par exemple, /modules/mymodule/override/classes/Product.php) permet à PrestaShop de le copier dans /override/ lors de l’installation et de le supprimer proprement lors de la désinstallation. C’est la méthode recommandée.

Voici un exemple rapide de surcharge de classe. Supposons que vous souhaitiez exposer le nom du contrôleur actuel dans votre modèle d’en-tête :

// /override/classes/controllers/FrontController.php

classe FrontController étend FrontControllerCore {

    fonction publique initHeader() {

        self::$smarty->assign('currentController', get_class($this));

        retourner parent::initHeader();

    }}

Appelez toujours la méthode parente, sauf raison valable de ne pas le faire. L'omettre perturbera silencieusement le fonctionnement de base.

Surcharge des classes et des contrôleurs de modules

Depuis PrestaShop 1.6, vous pouvez également surcharger les classes des modules. Ajoutez « Override » au nom de la classe (par exemple, BlockUserInfoOverride étendant BlockUserInfo) et placez-la dans le répertoire /override/modules/. La même règle s’applique aux contrôleurs de modules. Après toute surcharge, videz le cache, et plus précisément supprimez le fichier /cache/class_index.php, sinon les modifications ne seront pas prises en compte.

Quand NE PAS utiliser les substitutions

Les surcharges sont exclusives : une seule est autorisée par classe. Elles sont également interdites dans les modules de la marketplace et doivent être réservées aux personnalisations de boutiques privées. Avant d’utiliser une surcharge, considérez l’une des alternatives suivantes :

  • Crochets PrestaShop déclenche des événements de hook à chaque chargement de page ; vous pouvez les exploiter depuis un module pour exécuter du code personnalisé ou insérer du contenu dans la page sans avoir à toucher à une classe du noyau.
  • Remplacements de services Symfony : Les parties de PrestaShop migrées vers Symfony offrent une gestion plus claire des services. Vous pouvez personnaliser ou remplacer un service plutôt que de modifier directement la classe.
  • Modèle d’objet personnalisé : Besoin d’ajouter des champs à une entité principale ? Créez votre propre modèle objet avec sa propre table plutôt que de modifier celle existante.

Protection des modifications de configuration lors des mises à jour

Les mises à jour de PrestaShop peuvent modifier silencieusement la signature des méthodes, rendant ainsi vos surcharges obsolètes. Après chaque mise à jour, il est essentiel de revoir vos surcharges. Commentez les modifications apportées et leur raison d’être, consultez le journal des modifications et veillez à ce que vos surcharges restent aussi concises que possible. Une surcharge simple, bien commentée et appelant correctement les méthodes parentes résiste aux mises à jour. Une copie intégrale de la classe représente un bug potentiel.

Le cache « fantôme » : pourquoi votre modification semble invisible

La principale raison pour laquelle les développeurs pensent que leur personnalisation est défectueuse : PrestaShop n’analyse pas le répertoire `/override/` à chaque requête. Il compile une table de correspondance des classes dans `/cache/class_index.php`, et tant que ce fichier n’est pas supprimé et régénéré, votre personnalisation reste invisible, aussi correct que soit le code. Vider le cache Smarty ne suffit pas. Supprimez manuellement `class_index.php` via FTP/SSH, via Paramètres avancés > Performances dans l’interface d’administration, ou via la console Symfony.

Figure 1 : Le flux du système de remplacement PrestaShop et le rôle de /cache/class_index.php.

 

Le mur de Symfony : les anciennes configurations ne fonctionnent pas avec les contrôleurs modernes

Ce système PHP hérité ne fonctionne qu’avec l’ancienne couche ObjectModel de PrestaShop. À partir de PS 1.7, les principales zones du back-office, notamment les nouvelles pages produits et les écrans de commande, ont été réécrites avec Symfony. Le système de remplacement PHP n’affecte pas ces contrôleurs Symfony. Pour ceux-là, utilisez Décoration de serviceVous pouvez encapsuler ou remplacer un service via le fichier services.yml de votre module. Si une surcharge reste sans effet même après avoir vidé le fichier class_index.php, il est probable que le contrôleur ait été migré vers Symfony.

Résolution des conflits : lorsque deux modules souhaitent la même classe

Lorsque deux modules redéfinissent la même classe, PrestaShop génère une erreur lors de l’installation du second module et désactive sa redéfinition. La solution est manuelle : ouvrez les deux fichiers, fusionnez toutes les méthodes dans un seul fichier `/override/` qui étend la classe principale, puis supprimez `class_index.php`. Ajoutez des commentaires indiquant le module ayant contribué à chaque méthode. C’est pourquoi les redéfinitions sont interdites dans les modules de la marketplace : les conflits sont à la charge du marchand. Si vous développez pour d’autres plateformes, utilisez les hooks.

Figure 2 : Comment surviennent les conflits de remplacement lorsque deux modules ciblent la même classe, et la résolution de fusion manuelle.

À propos de Knowband

Knowband est un fournisseur de plugins et d’extensions e-commerce de confiance, fort d’une longue expérience dans l’accompagnement des e-commerçants pour la création de boutiques en ligne plus rapides, plus intelligentes et plus riches en fonctionnalités. Que votre boutique soit hébergée sur [plateforme manquante], Knowband est là pour vous. PrestaShop, OpenCartShopify, WooCommerce, MagentoQue ce soit pour iOS ou toute autre plateforme majeure, Knowband propose une large gamme de plugins et d’extensions prêts à l’emploi qui vous aident à améliorer les fonctionnalités, les performances et à offrir une meilleure expérience d’achat, sans avoir à tout développer à partir de zéro.

Faut-il passer de PrestaShop 8.1 à 9.0 ? Comparaison complète des fonctionnalités

Avec la sortie de PrestaShop 9.0, la plateforme évolue vers un avenir plus moderne, plus performant et plus convivial pour les développeurs. Cependant, comme pour toute mise à jour majeure, une question importante se pose aux commerçants et aux développeurs : Est-ce le bon moment pour migrer depuis PrestaShop 8.1 ?

Dans cet article, nous explorerons les principales différences entre PrestaShop 8.1 et 9.0. Des améliorations de performances aux outils de développement, nous aborderons tout ce que vous devez savoir pour prendre une décision éclairée quant à l’avenir de votre boutique.

Mise à jour du framework Symfony : de la version 4.4 à la version 6.4

Pour commencer, l’un des changements les plus significatifs de PrestaShop 9.0 est la mise à niveau du framework Symfony de la version 4.4 vers Symfony 6.4, la dernière version à support à long terme (LTS). Cette transition garantit une stabilité et une sécurité accrues, ainsi qu’un accès à des outils de développement modernes.

Symfony 6.4 sera maintenu avec des corrections de bugs jusqu’en novembre 2026 et des correctifs de sécurité jusqu’en novembre 2027, garantissant ainsi la stabilité à long terme des projets en évolution. À titre de comparaison, Symfony 4.4, utilisé dans PrestaShop 8.1, a déjà atteint la fin de sa durée de support. PrestaShop 9.0 devient donc le choix le plus judicieux pour les projets à long terme.

Améliorations de la compatibilité et des performances PHP

De plus, PrestaShop 9.0 prend désormais en charge PHP 8.1, 8.2 et 8.3. Les marchands bénéficient ainsi de performances améliorées, d’une meilleure gestion de la mémoire et de fonctionnalités PHP modernes.

Contrairement à PrestaShop 8.1, qui s’arrêtait à PHP 8.1, la nouvelle version intègre les dernières versions de PHP, ce qui représente une avancée majeure. PrestaShop 9.0 est ainsi mieux aligné avec les standards PHP et les pratiques de développement modernes. Cependant, gardez à l’esprit que les environnements d’hébergement plus anciens et le code personnalisé peuvent nécessiter des mises à jour pour garantir la compatibilité.

Plateforme API moderne pour le commerce sans tête

De plus, PrestaShop 9.0 propose un tout nouveau système d’API basé sur API Platform v3, améliorant considérablement ses interactions avec les applications externes. Il est ainsi idéal pour les architectures de commerce headless, les intégrations d’applications mobiles et les services tiers. PrestaShop 8.1, en revanche, s’appuyait sur une API héritée, dépourvue de la flexibilité et de l’évolutivité attendues par les développeurs modernes. Par conséquent, le nouveau système d’API ouvre un monde de possibilités d’automatisation et d’intégration. PrestaShop 9 inaugure une API d’administration entièrement repensée, développée à partir d’API Platform, un framework PHP de pointe reconnu pour sa flexibilité et sa puissance. Cette innovation marque une avancée majeure vers un environnement PrestaShop plus ouvert, extensible et axé sur les développeurs.

Voici ce que propose la nouvelle API d’administration :

  • Intégration simplifiée avec des plateformes externes telles que les ERP, les CRM et les outils marketing.
  • Architecture prête pour l’automatisation qui permet de réduire la gestion manuelle des magasins et d’améliorer l’efficacité opérationnelle.
  • Structure RESTful avec formatage JSON, garantissant une facilité d’utilisation pour les développeurs habitués aux normes API modernes.
  • Modularité prête pour l’avenir, permettant au système de croître et de s’adapter aux exigences de la communauté et des entreprises.

Il convient de noter que l’API d’administration est toujours en évolution. Bien que le cadre de base soit déjà en place, des fonctionnalités et des points de terminaison supplémentaires sont en cours de développement actif.

Mises à jour des crochets de clé dans PrestaShop 9

 PrestaShop 9 conserve la plupart des hooks couramment utilisés de la version 8 afin de garantir la compatibilité des modules et des thèmes. Les hooks front-office courants, comme affichageEn-tête, afficherPied de page, affichageAccueil et afficher les boutons du produit restent pris en charge. Dans le back-office, des points importants tels que afficherBackOfficeHeader, displayAdminOrderMain et afficherAdminProduitsExtra sont toujours disponibles pour étendre les fonctionnalités de base.

Parallèlement à cela, PrestaShop 9 introduit des hooks modernes basés sur Symfony comme actionSymfonyRéponse, actionAfterCartSave et actionProductFormBuilderModifier. Ils offrent une approche plus propre et axée sur les événements en matière de personnalisation et font partie de l’évolution de la plateforme vers une structure plus modulaire et évolutive.

Back Office repensé avec Symfony et Twig

Une autre amélioration significative est la refonte complète du back-office, désormais basé sur Symfony et Twig pour une structure plus moderne et plus facile à maintenir. L’expérience d’administration est ainsi plus intuitive, optimisée pour les appareils mobiles et centrée sur l’utilisateur.

Pour les e-commerçants, la nouvelle interface simplifie la navigation et améliore la productivité. Pour les développeurs, cette évolution favorise des modèles plus clairs et réduit les dépendances au code hérité. En revanche, PrestaShop 8.1 conserve une interface plus traditionnelle, qui peut paraître désuète en comparaison.

Améliorations axées sur les développeurs

De plus, PrestaShop 9.0 a remplacé plusieurs bibliothèques obsolètes utilisées dans les versions précédentes. Par exemple :

  • Client HTTP Guzzle → Client HTTP Symfony
  • SwiftMailer → Symfony Mailer

Ces mises à jour permettent d’obtenir un module et une gestion des e-mails plus sûrs, plus efficaces et plus évolutifs.

De plus, le système de connexion a été modernisé. Les anciens hooks ont été supprimés et un nouveau hook actionBackOfficeLoginForm a été introduit, offrant des flux d’authentification plus clairs et plus personnalisables.

Transition vers les modèles Twig

Il est important de noter que PrestaShop 9.0 marque également une avancée majeure vers l’intégration complète de Twig, remplaçant progressivement l’ancien moteur Smarty. Twig est désormais largement utilisé en front-office et en back-office, offrant des modèles plus lisibles, modulaires et réutilisables.

Pour les développeurs de thèmes, il s’agit d’une amélioration significative. En revanche, la dépendance de PrestaShop 8.1 à Smarty limite la flexibilité et la maintenabilité à long terme.

Devez-vous passer à PrestaShop 9.0 ?

PrestaShop 9.0 apporte des améliorations majeures, mais avant de procéder à la mise à niveau, assurez-vous que votre boutique est prête à gérer le changement. If vos thèmes, modules et environnement d’hébergement sont compatibles (ou peuvent être facilement mis à jour), alors la migration peut apporter des avantages notables en termes de performances et d’expérience utilisateur.

Par ailleurs, si votre boutique actuelle dépend fortement de plugins hérités ou d’un code personnalisé complexe, il peut être plus judicieux d’attendre qu’une prise en charge plus large des modules soit disponible. Il est fortement recommandé de tester dans un environnement de test avant de procéder à une mise à niveau complète.

Conseils de migration pour les propriétaires de magasins

Avant de procéder au changement, suivez ces bonnes pratiques :

  • Sauvegardez l’intégralité de votre boutique, y compris la base de données et tous les fichiers personnalisés.
  • Testez d’abord la mise à niveau dans un environnement de test pour éviter de perturber votre boutique en ligne.
  • Vérifiez la compatibilité de tous les thèmes et modules tiers.
  • Surveillez les commentaires de la communauté pour les rapports de bogues et les problèmes de migration.
  • Effectuez des tests approfondis, en particulier dans les zones de paiement, de paiement et d’affichage des produits.

Réflexions finales

PrestaShop 9.0 marque une avancée majeure vers une plateforme e-commerce moderne, sécurisée et évolutive. Des performances plus rapides, des frameworks mis à jour et une expérience développeur plus fluide offrent des avantages significatifs aux commerçants comme aux développeurs.

En conclusion, si la migration nécessite des efforts et une planification, les bénéfices à long terme en font un investissement rentable. Que vous soyez un utilisateur expérimenté de PrestaShop ou que vous envisagiez d’ouvrir votre première boutique, c’est le moment idéal pour explorer les avantages de la version 9.0 pour votre entreprise. Si vous recherchez une solution fiable pour une mise à niveau en douceur, KnowBand propose le développement de modules personnalisés et des extensions compatibles PrestaShop 9.0 pour accélérer votre transition. Son support expert et sa bibliothèque complète de modules PrestaShop en font un partenaire précieux pour les mises à niveau majeures.