Disponible pour missions & renforts d’agence · Réponse rapide, par la personne qui intervient

Modules PrestaShop incompatibles après une migration

Un module qui tournait sans problème depuis des années peut disparaître silencieusement ou planter net après une migration PrestaShop. Ce n’est presque jamais un hasard : il y a toujours un mécanisme technique précis derrière, et il se vérifie avant de migrer.

Décrire mon problème Discuter sur WhatsApp

Comment un module déclare sa compatibilité

Chaque module PrestaShop déclare la plage de versions avec laquelle il fonctionne dans son fichier config.xml, via les balises <compatibility><min> et <max>. La même information existe aussi dans la classe PHP principale du module, sous la forme de la propriété $ps_versions_compliancy. C’est sur cette déclaration que se base le marketplace officiel Addons pour indiquer si un module est proposé comme compatible avec une version donnée : si le module n’a jamais été mis à jour pour couvrir la version cible, il n’apparaît simplement plus comme disponible pour elle.

Cette déclaration ne garantit pas à elle seule que le module fonctionnera réellement : elle indique l’intention de l’éditeur, pas le résultat d’un test exhaustif. Mais son absence est un signal fiable : un module dont la plage de compatibilité s’arrête avant la version visée n’a de toute façon aucune chance de fonctionner correctement.

Les quatre mécanismes qui rendent un module incompatible

  • Le hook de paiement a changé de nom entre PrestaShop 1.6 et 1.7 : displayPayment (1.6) est remplacé par paymentOptions (1.7, 8 et 9). Un module de paiement écrit pour 1.6 et jamais mis à jour n’apparaît simplement plus au moment de payer, sans message d’erreur : c’est une cause fréquente et sournoise de « le module a disparu ».
  • Beaucoup de modules anciens utilisent une syntaxe d’accès aux tableaux ou aux chaînes avec des accolades, par exemple $array{0} au lieu de $array[0]. Cette syntaxe a été supprimée en PHP 8 et provoque une erreur fatale dès que le module tourne sur un serveur passé en PHP 8, indépendamment même de la version de PrestaShop installée.
  • Le système d’override, qui remplace des fichiers du dossier override/ pour modifier une classe ou un contrôleur du cœur, casse à chaque migration majeure si la classe d’origine a changé de signature ou de structure entre les deux versions : l’override peut alors ne plus être appelé du tout, ou provoquer une erreur PHP à l’exécution.
  • Un module déclaré compatible sur le papier peut malgré tout ne jamais avoir été réellement testé sur la version cible par son éditeur, en particulier pour des modules peu maintenus ou abandonnés : la déclaration de compatibilité dans config.xml reflète une intention, pas un test exhaustif.

Comment je vérifie la compatibilité avant de migrer

  1. Lire le config.xml de chaque module installé

    Je vérifie la plage de compatibilité déclarée dans chaque module réellement installé sur la boutique, y compris ceux qui semblent secondaires.

  2. Vérifier la fiche du module sur Addons

    Je consulte la page du module sur le marketplace officiel pour voir quelles versions sont annoncées comme compatibles par l’éditeur, et si une version à jour existe.

  3. Tester sur une copie de la boutique

    La déclaration de compatibilité ne remplace jamais un test réel. Je migre d’abord sur une copie et j’exerce chaque module dans ses fonctions principales avant de valider la bascule.

  4. Relire manuellement les overrides et personnalisations

    Un module ou une personnalisation qui repose sur beaucoup d’overrides demande une relecture manuelle systématique, pas seulement un test automatisé, parce qu’une erreur d’override peut rester silencieuse jusqu’à ce qu’une action précise la déclenche.

Que faire quand un module n’a pas d’équivalent officiel sur la version cible

Quand un module n’existe tout simplement pas pour la version visée, je commence par chercher un module équivalent chez un autre éditeur : la fonctionnalité en elle-même est rarement unique, même si le module précis ne l’est plus. Si aucune solution du marché ne convient, je développe un module sur mesure adapté à la nouvelle architecture, en reprenant la logique métier du module d’origine sans hériter de son code devenu obsolète.

Pages liées

Décrivez votre besoin en 1 minute

Quelques questions ciblées pour que je vous réponde avec une estimation, pas avec un questionnaire de plus.

Quelle est la version actuelle ?
Vers quelle version souhaitez-vous aller ?
Quelle est la taille du catalogue ?

C’est le premier facteur de durée d’une migration, avant même le nombre de modules.

La boutique utilise-t-elle beaucoup de modules tiers ou personnalisés ? (facultatif)

Chaque module non natif doit être vérifié, remplacé ou réécrit pour la version cible.

Qu’est-ce qui doit impérativement être conservé ? (facultatif)
Indiquez au moins un e-mail ou un téléphone pour que je puisse vous répondre.

Indiquez au moins un e-mail ou un téléphone pour que je puisse vous répondre.

Questions fréquentes

Pourquoi mon module de paiement a-t-il disparu de la page de paiement après la migration, sans aucune erreur ?
C’est très probablement lié au changement de hook entre 1.6 et 1.7 : displayPayment est remplacé par paymentOptions. Un module de paiement jamais mis à jour ne s’accroche plus au nouveau hook et disparaît sans message d’erreur.
Un module annoncé compatible sur Addons peut-il quand même planter ?
Oui, la déclaration de compatibilité dans config.xml reflète l’intention de l’éditeur, pas un test exhaustif sur ma configuration précise. C’est pour ça qu’un test réel sur une copie de la boutique reste indispensable.
Pourquoi un module qui marchait très bien plante d’un coup après un passage à PHP 8 ?
Souvent à cause d’une syntaxe d’accès aux tableaux avec des accolades, du type $array{0}, supprimée par PHP 8. Cette erreur fatale n’a rien à voir avec la version de PrestaShop, elle vient uniquement du changement de version PHP.
Un override qui fonctionnait en 1.6 peut-il vraiment casser sans qu’on touche à son code ?
Oui, si la classe qu’il surcharge a changé de signature ou de structure dans la nouvelle version. L’override n’est alors soit plus appelé, soit source d’une erreur PHP au moment de l’exécution.
Que faites-vous si aucun module équivalent n’existe pour ma version cible ?
Je cherche d’abord une alternative chez un autre éditeur. Si rien ne convient, je développe un module sur mesure qui reprend la logique métier du module d’origine, adapté à l’architecture de la nouvelle version.