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

Deux modules qui se marchent dessus

Chaque module fonctionne parfaitement quand il est seul. Activés ensemble, ils cassent le panier, vident une page ou bloquent l’administration. Un conflit ne se devine pas en lisant les descriptions : il se prouve en isolant, et il y a une méthode pour ça.

Décrire mon problème Discuter sur WhatsApp

Ce qui trahit un conflit plutôt qu’un bug

  • La panne est apparue exactement au moment de l’installation d’un module, sans autre changement
  • Désactiver le module fautif règle le problème, mais l’autre module perd sa fonction
  • Une page s’arrête au milieu, la partie basse ne s’affiche plus
  • Un bouton ne réagit plus, et la console du navigateur affiche une erreur de script
  • Le back-office devient inaccessible immédiatement après une activation

Les quatre formes de conflit que je rencontre

Le conflit de surcharge. Sur PrestaShop, un module peut remplacer le comportement d’une classe du cœur en déposant un fichier de surcharge. Deux modules qui veulent remplacer la même méthode de la même classe ne peuvent pas cohabiter : le second refuse de s’installer, ou pire, écrase silencieusement le premier si les fichiers ont été déposés à la main. C’est la cause la plus fréquente d’un module qui « ne fait plus rien » alors qu’il est actif.

Le conflit d’ordre. Deux modules accrochés au même endroit s’exécutent l’un après l’autre, et le second peut annuler ce que le premier a fait : recalculer un total, remplacer un contenu, redéfinir un prix. L’ordre est modifiable, et modifier l’ordre suffit parfois à tout régler.

Le conflit de bibliothèque. Deux modules chargent chacun leur propre version d’une même bibliothèque JavaScript. La page charge les deux, la seconde écrase la première, et tout ce qui dépendait de la version initiale s’arrête. C’est visible dans la console du navigateur, pas dans les journaux du serveur.

Le conflit de nom. Deux extensions déclarent une fonction ou une classe portant le même nom, et PHP s’arrête net avec une erreur fatale de redéclaration. Sur WordPress, c’est un classique des extensions qui embarquent la même bibliothèque tierce sans précaution.

Comment j’identifie le coupable sans casser la boutique

  1. Travailler sur une copie, pas en production

    L’isolement par désactivation successive n’est pas acceptable sur une boutique qui vend. Je duplique le site, et j’y fais les manipulations qui seraient inacceptables en ligne.

  2. Lire les journaux avant de toucher quoi que ce soit

    Une erreur fatale de redéclaration nomme le fichier et la ligne : le conflit est identifié en une minute, sans aucune désactivation.

  3. Dichotomie plutôt que désactivation une par une

    Je désactive la moitié des modules, je teste, puis je recoupe la moitié restante. Sur une boutique qui compte de nombreux modules, cette méthode divise fortement le nombre d’essais.

  4. Vérifier la console du navigateur en parallèle

    Un conflit JavaScript ne laisse aucune trace côté serveur. Si la page se charge mais qu’un bouton reste inerte, la réponse est dans la console, pas dans les journaux PHP.

Une fois le coupable identifié, quatre issues possibles

La plus simple : changer l’ordre d’exécution, quand le conflit vient d’un écrasement de résultat. La deuxième : reporter la fonction d’un des deux modules dans un module unique qui fait les deux, ce qui supprime le conflit à la racine. La troisième : remplacer l’un des deux par une solution qui ne surcharge pas la même chose. La quatrième, la moins durable, consiste à corriger le module fautif dans son code — mais cette correction saute à sa prochaine mise à jour si elle n’est pas isolée.

Je signale toujours quand le conflit vient d’une pratique fragile plutôt que d’un accident : un module qui dépose une surcharge de classe du cœur pour ajouter un champ, ou qui embarque sa propre copie d’une bibliothèque commune, produira d’autres conflits plus tard, avec d’autres modules. Le remplacer coûte parfois moins cher que de le rafistoler à chaque fois.

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 version de PrestaShop ?
Sur quoi avez-vous besoin d’aide ?
Quel est l’état actuel de la boutique ?
Le thème est-il un thème du marché ou sur mesure ? (facultatif)

Un thème très modifié change la façon d’intervenir sans rien casser.

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

Peut-on prévoir un conflit avant d’installer un module ?
Partiellement. On peut vérifier s’il dépose des surcharges de classes du cœur et s’il embarque des bibliothèques communes : ce sont les deux signaux qui annoncent des ennuis. Mais la certitude ne s’obtient qu’en l’installant sur une copie du site.
Faut-il désactiver les modules un par un pour trouver le coupable ?
C’est la méthode la plus lente. La recherche par moitiés successives donne le même résultat en beaucoup moins d’essais, et la lecture préalable des journaux permet souvent de sauter l’étape complètement.
Deux modules peuvent-ils surcharger la même classe ?
Ils peuvent surcharger la même classe tant qu’ils ne touchent pas la même méthode. C’est la méthode identique, redéfinie deux fois, qui bloque l’installation du second.
Le conflit peut-il venir du thème plutôt que d’un module ?
Oui, et c’est fréquent. Un thème qui embarque sa propre version d’une bibliothèque, ou qui recopie des gabarits sans les tenir à jour, se comporte exactement comme un module en conflit. Je le teste en basculant temporairement sur le thème par défaut.
Après avoir corrigé le conflit, faut-il refaire les tests ?
Oui, et pas seulement sur la page qui posait problème : un changement d’ordre d’exécution ou une surcharge retirée peut déplacer le symptôme ailleurs, typiquement dans le tunnel de commande.