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.

Nouveautés de PrestaShop 9.0 ? Guide complet des fonctionnalités et de la migration

 

Pourquoi PrestaShop ?

PrestaShop est une plateforme e-commerce open source de premier plan, reconnue pour sa flexibilité, ses fonctionnalités performantes et son absence de coûts de licence. Son interface intuitive, sa prise en charge multilingue et multidevise, ainsi que son riche écosystème de modules et de thèmes en font une solution idéale pour les PME souhaitant créer des boutiques en ligne personnalisées. PrestaShop 9.0 représente une étape importante, avec des améliorations de performances et des avancées architecturales essentielles, conformes aux normes de développement modernes, à l’évolutivité et à la maintenabilité à long terme.

Quoi de neuf dans PrestaShop 9.0 ?

PrestaShop 9.0 apporte une modernisation complète du framework de base, un bond en avant majeur, redéfinissant la manière dont les développeurs et les propriétaires de magasins interagissent avec le système.

Modifications de l’architecture de base

Intégration complète de SymfonyPrestaShop 9 finalise sa transition vers le framework Symfony, offrant ainsi une base moderne et stable pour les développements futurs. Les classes obsolètes et les contrôleurs obsolètes ont été dépréciés ou remplacés, rendant le système plus facile à maintenir et conforme aux meilleures pratiques.

Prise en charge de PHP 8.1+:Nécessite PHP 8.1 ou supérieur, garantissant la compatibilité avec les dernières fonctionnalités, une sécurité améliorée et des performances plus rapides.

Doctrine DBAL:La couche d’abstraction de base de données améliore les interactions avec la base de données, offrant une meilleure abstraction, une meilleure création de requêtes et une meilleure testabilité, particulièrement bénéfique pour les personnalisations à grande échelle.

Développement centré sur le compositeur: Composer 2.x joue désormais un rôle central dans le flux de travail de développement, en gérant la gestion des dépendances, l’intégration des modules et le chargement automatique de manière transparente. Cela simplifie le contrôle des versions et améliore la compatibilité CI/CD.

Améliorations du back-office et des développeurs

En se concentrant sur les améliorations du backend, les commerçants et les développeurs remarqueront :

  • Chargements de pages plus rapides et temps de réponse du serveur améliorés
  • Base de code plus propre grâce à la suppression de la logique héritée
  • Modularité améliorée pour des modules plus propres et autonomes
  • Couverture de test renforcée pour des versions stables et sécurisées

Bien que les modifications de l’interface utilisateur soient minimes, ces mises à jour sous le capot améliorent considérablement la stabilité et la maintenabilité du magasin.

Guide de migration : de PrestaShop 8 à 9

Méthode 1 : Mise à niveau en un clic (recommandée)

Outils disponibles :

  • Module officiel de mise à niveau en 1 clic : module de mise à niveau standard de PrestaShop gérant automatiquement les transitions de version
  • MigrationPro : solution tierce prenant en charge la migration avec un transfert de données complet
  • PrestaShop Migrator : une solution alternative en un clic pour des mises à niveau fluides

Avantages:

  • Processus automatisé avec une intervention manuelle minimale
  • Contrôles d’intégrité des données intégrés
  • Risque d’erreur humaine réduit
  • Temps de migration plus rapide
  • Création de sauvegarde automatisée

Processus de sauvegarde de mise à niveau automatique :

  1. Initialisation de la sauvegarde : démarrage du processus, suppression des fichiers temporaires restants
  2. BackupFiles : sauvegarde complète des fichiers de la boutique, des thèmes, des modules, des images et du code personnalisé
  3. BackupDatabase : crée une sauvegarde complète de la base de données entière, y compris toutes les tables et les données stockées.
  4. Faites-moi savoir si vous préférez une version plus concise ou plus détaillée.
  5. BackupComplete : Finalisation du processus avec vérification

Processus de restauration: Si la mise à niveau rencontre des problèmes, revenez facilement en arrière via la section « Retour en arrière » du module de mise à niveau automatique en sélectionnant l’archive de sauvegarde et en surveillant la progression de la restauration.

Migration de données: Gère automatiquement le transfert de produits, de catégories, d’attributs, de comptes clients, d’historique de commandes, de pages CMS, de paramètres de configuration, d’images et de configurations de modules compatibles.

Méthode 2 : Migration manuelle (prenant beaucoup de temps)

Nouvelle installation de PrestaShop 9 suivie d’une migration manuelle des données.

Présentation du processus:

  1. Examen des exigences du serveur: PHP 8.1+, MySQL 5.7+/MariaDB 10.3+, Composer 2.x, Apache/Nginx
  2. Sauvegarde complète: Base de données, fichiers, configuration, code personnalisé
  3. Installer PrestaShop 9.0: Nouvelle installation via Git et Composer
  4. Stratégie de migration des données: Exporter depuis PS8 (produits, clients, commandes, CMS, configurations) et importer vers PS9 à l’aide d’outils natifs, de modules tiers ou de saisie manuelle
  5. Évaluation de la compatibilité des modules: Auditer les modules existants, mettre à jour les modules compatibles, identifier les alternatives aux modules incompatibles
  6. Thème Reconstruction: Reconstruire les thèmes en utilisant l’architecture mise à jour de PS9, s’adapter aux exigences de Symfony
  7. Tests complets: Fonctionnalités front office (navigation, paiement, paiements, mobile) et back office (gestion des produits, commandes, reporting)

Recommandation

Méthode 1 (mise à niveau en un clic) est fortement recommandé pour la plupart des commerçants en raison de :

  • Temps de migration considérablement réduit
  • Risque réduit de perte/corruption de données
  • Gestion automatisée des relations de données complexes
  • Capacités de restauration intégrées
  • Disponibilité d’un support professionnel

Envisagez la méthode 2 (migration manuelle) uniquement pour des exigences de personnalisation spécifiques nécessitant une nouvelle installation ou lorsque les outils automatisés sont incompatibles.

Liste de contrôle post-migration

Quelle que soit la méthode choisie :

  • Vérifier toutes les fonctions critiques du magasin
  • Tester les intégrations de paiement et d’expédition
  • Confirmer les paramètres SEO et les structures d’URL
  • Mettre à jour les certificats DNS et SSL si nécessaire
  • Surveiller les performances du site et les vitesses de chargement
  • Former le personnel aux changements d’interface

Réflexions finales

PrestaShop 9.0 met le cap sur une vitesse accrue, une sécurité renforcée et un écosystème davantage centré sur les développeurs. Bien que la mise à niveau nécessite planification et efforts, les avantages à long terme sont considérables : meilleures performances, code plus propre, évolutivité accrue et outils modernes.

Si vous utilisez une ancienne version, évaluez la valeur à long terme du passage à PrestaShop 9. Si vous n’êtes pas sûr du processus ou si vous manquez de développeurs internes, il est fortement recommandé de consulter un expert PrestaShop ou un partenaire certifié.

Vous hésitez encore à changer de fournisseur ?

Si vous n’êtes pas sûr que passer de PrestaShop 8 à 9 soit la bonne étape pour votre boutique, nous vous invitons à consulter notre comparaison détaillée et nos avis d’experts.

Découvrez les principaux avantages, les risques potentiels et l’impact réel de la migration, et prenez une décision éclairée pour votre entreprise.

Découvrez le guide comparatif PrestaShop 8 vs 9