Blog
Outil gratuit de vérification de la compatibilité des modules PrestaShop 9
Avant de mettre à niveau une boutique vers la version PrestaShop 9, vous souhaitez savoir quels modules ne fonctionneront plus correctement. Vous pouvez certes les installer un par un sur une copie de test et les parcourir, mais cette méthode est fastidieuse et ne permet de détecter que les problèmes que vous parvenez à déclencher par hasard.
Nous avons donc écrit un petit script qui effectue cette première étape à votre place. ps9check analyse un module et répertorie le code supprimé par les versions PrestaShop 8 ou 9 : classes et méthodes principales, hooks, classes de présentateur déplacées, fonctions PHP supprimées dans PHP 8, ainsi que quelques pièges liés à la validation des thèmes et des extensions. Il est gratuit et open source : github.com/asymetria/ps9-compat-check.
Mise en route rapide
Vous devez disposer de PHP 7.4 ou d'une version plus récente sur votre ordinateur ou votre serveur. PrestaShop et Composer ne sont pas nécessaires.
- Télécharger le script : ps9-compat-check (ZIP), puis décompressez-le.
- Exécutez-le sur un dossier de module ou un fichier ZIP de module :
php ps9check.php /path/to/modules/yourmodule
php ps9check.php yourmodule.zip
Dans une boutique, les modules se trouvent dans le modules/ dossier. Pour tous les cocher d'un seul coup sous Linux ou macOS :
for m in /var/www/shop/modules/*/; do php ps9check.php "$m"; done
À quoi ressemble un rapport ?
Voici le résultat pour la version 2.0.4 de ps_vérification_paiement, l'un des modules de paiement développés par PrestaShop, écrit en PrestaShop en 1.7 jour :
PrestaShop 9 compatibility check — ps_checkpayment 2.0.4
21 files scanned
ERROR ps_checkpayment.php:176
Tools::displayPrice() was removed in PrestaShop 9.0.
→ Use $this->context->getCurrentLocale()->formatPrice($price, $this->context->currency->iso_code).
ERROR ps_checkpayment.php:270
Tools::displayPrice() was removed in PrestaShop 9.0.
NOTICE views/templates/front/payment_infos.tpl:34
Unfiltered output ({... nofilter}). The PrestaShop Addons review reports it as a security issue.
2 error(s), 0 warning(s), 1 notice(s)
PrestaShop a corrigé ce module il y a longtemps, et la version actuelle fonctionne sans erreur. Cependant, ce même code est toujours utilisé dans de nombreuses boutiques, aux côtés de modules tiers dont les auteurs ne les ont jamais mis à jour.
Chaque résultat renvoie à un fichier et à une ligne. Pour les problèmes les plus courants, le rapport propose également une solution de remplacement, ce qui vous permet de voir immédiatement si la correction se résume à une seule ligne ou s'il s'agit d'une tâche plus importante.
Ce qu'il vérifie
- Cours fondamentaux supprimés, qu'il soit utilisé avec
new,extends,useou des appels statiques. Lorsqu'une classe a simplement été déplacée, comme c'est le cas pour les présentateurs « panier » et « produit », le rapport indique le nouvel espace de noms. - Méthodes principales supprimées, par exemple
Tools::displayPrice(),Tools::encrypt()ouConfiguration::getInt(), y compris les méthodes dont un module hérite :$this->addMedia()dans un contrôleur frontal ou$this->ajaxDie(). - Suppression des constantes et de hooks, tous deux dans
registerHook()et danshookXxx()des méthodes qui ne seront plus jamais appelées. - La plage de compatibilité indiquée. Si
ps_versions_compliancysi la valeur finale est inférieure à 9.0, PrestaShop 9 n'installera pas le module. - Suppressions dans PHP 8. PrestaShop 9 nécessite PHP 8.1 ou une version plus récente ; par conséquent, des fonctions telles que
create_function()oueach()sont également signalés. - Remplacements de méthodes du noyau qui n'existent plus, qui cessent de fonctionner sans prévenir.
- Les pièges du Hummingbird et des extensions: les modules qui transmettent leur propre code HTML à la fenêtre contextuelle du panier du thème, les fichiers de modèle inclus spécifiques au thème, et
nofilterrésultat.
D'où provient la liste des codes supprimés ?
Nous n'avons pas rédigé cette liste à la main. Un deuxième script présent dans le référentiel lit le Code source de PrestaShop Pour les versions 1.7.8, 8.2 et 9.0, il compare leurs classes, méthodes, constantes et hooks, et recense les éléments supprimés ainsi que la version dans laquelle ils ont été supprimés. Les données actuelles couvrent 444 classes supprimées, environ 1 800 méthodes supprimées, 23 constantes et 16 hooks. Tout le monde peut le recompiler à partir des versions officielles.
Nous avons vérifié les résultats par rapport à du code réel. De notre propre initiative Block Sliding Cart module : avant de le faire passer à la version PrestaShop 9, il signalait exactement les problèmes que la validation des extensions avait détectés à l'époque. Sur la version actuelle, qui a passé cette validation, il ne signale rien. Les versions actuelles des modules propres à PrestaShop ne présentent elles non plus aucune erreur.
Son utilisation dans l'intégration continue (CI)
Le script renvoie un code de sortie 1 lorsqu'il détecte des erreurs, ce qui lui permet d'interrompre la compilation. Pour un module hébergé sur GitHub, deux étapes dans un workflow suffisent :
- run: curl -sL https://github.com/asymetria/ps9-compat-check/archive/refs/heads/master.tar.gz | tar xz
- run: php ps9-compat-check-master/ps9check.php .
Utilisation --format=json pour votre propre outillage, ou --format=md pour créer un tableau que vous pouvez insérer dans un ticket ou un rapport.
Ce qu'il ne peut pas faire
Il s'agit d'une analyse statique ; elle signale donc le code supprimé par PrestaShop. Elle ne peut pas déterminer le type d'une variable ; ainsi, un appel tel que $product->something() Cette erreur n'est signalée que lorsque le nom de cette méthode n'existe plus nulle part dans le noyau. Elle ne détecte pas non plus les changements de comportement ni les erreurs qui n'apparaissent qu'au moment de l'exécution.
Considérez cela comme une première étape. Ensuite, installez le module sur une copie PrestaShop 9 avec le mode débogage activé, ouvrez sa page de configuration et cliquez sur les options front office du thème Hummingbird. Nous avons décrit les résultats obtenus pour notre propre module dans Mise à niveau d'un module PrestaShop vers la version PrestaShop 9 : ce qui n'a pas fonctionné et comment nous y avons remédié.
Foire aux questions
Le jeu de dames est-il gratuit ?
Oui. Il s'agit d'un logiciel libre sous licence MIT, et vous pouvez l'utiliser sur votre propre boutique, sur celles de vos clients ou au sein de vos propres outils.
Est-ce que cela modifie mon module ou télécharge quelque chose ?
Non. Le programme se contente de lire les fichiers et d'imprimer un rapport. Rien n'est modifié et aucune donnée ne quitte votre ordinateur.
Puis-je l'utiliser sur une boutique en ligne déjà en service ?
Oui, il ne fait que lire les fichiers. Cela dit, le plus sûr reste de télécharger le modules/ dossier, ou les fichiers ZIP des modules, puis lancez la vérification sur votre propre ordinateur.
Le rapport est vide. Mon module est-il prêt pour la version PrestaShop 9 ?
Cela signifie qu'aucune des suppressions connues n'a été détectée, ce qui est bon signe. Testez-le quand même sur une copie PrestaShop 9 : l'outil de vérification ne peut pas détecter les changements de comportement ni les problèmes de mise en page spécifiques au thème.
Quelles versions de PrestaShop sont concernées ?
Ce document répertorie les éléments qui ont été supprimés entre les versions 1.7.8 et 9.0 ; il est donc utile aussi bien pour les modules de la version 1.7 qui passent à la version 8 ou 9 que pour les modules de la version 8.x qui passent à la version 9.
Si le rapport est long
Certaines corrections ne nécessitent qu'une seule ligne de code. D'autres impliquent de réécrire la manière dont un module charge ses classes ou affiche ses modèles. Si vous préférez confier cette tâche à quelqu'un d'autre, c'est justement notre métier : Corrections apportées au module PrestaShop. Envoyez-nous le rapport et nous vous répondrons en vous posant des questions ou en vous proposant un devis.
