Migrer une boutique PrestaShop 1.7 vers la version 9
Sauter directement de 1.7 à 9, c’est franchir en une fois le passage à Symfony 6.4, à PHP 8.1 minimum et à un back-office entièrement Twig : un saut plus lourd qu’il n’y paraît.
Ce qui change entre 1.7 et 9
Entre PrestaShop 1.7 et 9, l’écart n’est plus une question de version : c’est un changement de génération. La 1.7 repose sur une architecture hybride, une partie du back-office et certains contrôleurs front en Symfony, le reste en Smarty pur avec des contrôleurs d’administration legacy. PrestaShop 9 supprime ces derniers : le back-office repose désormais entièrement sur des contrôleurs Symfony et Twig, et Symfony lui-même passe à la 6.4 LTS, contre une base bien plus ancienne côté 1.7/8. Côté PHP, 1.7 plafonne à 7.4 sur sa dernière sous-version, alors que 9 demande PHP 8.1 minimum et prend en charge 8.2, 8.3 et 8.4 : aucun recouvrement direct entre les deux plages.
PrestaShop 9 ajoute aussi une nouvelle API d’administration, l’Admin API, basée sur API Platform avec authentification OAuth. Côté thème, la 9 introduit Hummingbird, mais Classic reste le défaut à la sortie : pas de reconstruction de thème obligatoire, contrairement au passage 1.6 vers 1.7.
La base de données change de structure à chaque version majeure ; ici, deux paliers (1.7 vers 8, puis 8 vers 9) doivent être couverts par les scripts d’autoupgrade, en une opération ou en deux.
Ce qui casse sur un tel écart de version
- Un module qui s’appuie sur un contrôleur legacy en Smarty ne trouve plus ce contrôleur en 9 : il ne plante pas, il disparaît.
- Une surcharge de méthode du cœur écrite pour 1.7 ignore les types de retour exigés depuis PHP 8.1 : erreur fatale, pas un avertissement.
- Un module utilisant encore la syntaxe accolades pour un tableau ou une chaîne ($array{0}) ne s’exécute plus sous PHP 8.1 ou supérieur.
- Une intégration développée sur l’ancienne API web service n’a pas été pensée pour l’authentification OAuth de la nouvelle Admin API et doit être revue.
- Un module dont la compatibilité déclarée dans config.xml s’arrête à la version 8 est refusé à l’installation sur une 9.
Comment j’aborde ce saut de version
-
Audit et décision du parcours
Je liste modules, surcharges de contrôleurs et de templates back-office, et intégrations utilisant l’API web service actuelle, puis je décide du découpage. autoupgrade enchaîne les paliers sans en sauter aucun : les scripts de mise à jour de chaque version intermédiaire s’exécutent de toute façon, la question est seulement de savoir si je les laisse défiler dans un seul lancement ou si je marque un arrêt en 8 pour vérifier l’état de la boutique, notamment quand des modules ou surcharges legacy sont encore en usage.
-
Sauvegarde complète indépendante
Dump SQL complet et copie intégrale des fichiers avant toute opération, en plus de la sauvegarde interne d’autoupgrade, conservés hors du serveur modifié.
-
Migration sur copie de la boutique
Toute la procédure est rejouée sur un environnement de test, PHP cible déjà en place, pour voir apparaître erreurs de type de retour et contrôleurs manquants avant qu’ils ne touchent le site réel.
-
Le point de non-retour : l’exécution des scripts de base
Dès que les scripts de mise à jour s’exécutent, seule la restauration du dump pris avant l’opération permet un retour en arrière propre. Cette étape n’est lancée qu’après validation complète sur l’environnement de test.
-
Réécriture des contrôleurs et modules legacy
Les contrôleurs d’administration encore en Smarty et les modules qui en dépendent sont réécrits pour l’architecture Symfony/Twig de la 9, pas mis à jour.
-
Bascule en production
Une fois la version de test validée et le PHP cible confirmé, je programme la bascule à faible trafic.
Comment je vérifie après coup
Je compare les volumes de commandes, clients et produits entre ancienne et nouvelle base après chaque palier. Je teste le tunnel de commande sur chaque moyen de paiement, que les contrôleurs réécrits fonctionnent pour chaque profil back-office, et qu’aucune intégration API n’est restée sur l’ancienne authentification. Je surveille aussi le journal d’erreurs PHP les premiers jours, en particulier les erreurs de type de retour qui n’apparaissent parfois qu’à l’usage réel d’une fonctionnalité peu utilisée.
Pages liées
-
Migration PrestaShop 1.7 vers 8
Le premier palier avant la 9, si votre écosystème de modules n’est pas prêt pour un saut direct.
-
Migration PrestaShop 8 vers 9
Le second palier, une fois la compatibilité PHP 8 déjà acquise.
-
Modules incompatibles après migration
Pourquoi un module qui fonctionnait plante ou disparaît après une mise à jour.
-
Checklist avant une migration
Ce qu’il faut vérifier et sauvegarder avant une migration.
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.