Aller au contenu principal

Écrire un module compatible PrestaShop 1.7 et 8

Beaucoup de boutiques sont encore en 1.7 pendant que d’autres passent en 8. Maintenir deux versions d’un même module double le travail ; le plus simple est d’en écrire une seule qui tourne sur les deux. Ça demande un peu de discipline, pas de magie.

PHP
public function __construct()
{
    $this->name = 'w4umodule';
    $this->tab = 'administration';
    $this->version = '2.0.0';
    $this->author = 'W4U';
    $this->need_instance = 0;
    $this->bootstrap = true;
    // Une seule déclaration couvre 1.7.6 et toute la branche 8
    $this->ps_versions_compliancy = ['min' => '1.7.6.0', 'max' => '8.99.99'];

    parent::__construct();
}

Les points de vigilance : les méthodes Tools dépréciées depuis longtemps et supprimées en 8, les hooks renommés pendant la vie de la 1.7, et la version de PHP. PrestaShop 8 accepte PHP 8.1, alors que la 1.7.8 s’arrête à PHP 7.4 : le code doit donc rester valide sur les deux, sans fonctions supprimées en PHP 8 ni syntaxe trop récente pour PHP 7.2. Pour tester, deux boutiques de développement, une par branche, et chaque version du module passe sur les deux avant d’être livrée.

PHP
// Supprimées dans PrestaShop 8 : Tools::jsonDecode() et Tools::jsonEncode()
$donnees = Tools::jsonDecode($reponse, true);
$donnees = json_decode($reponse, true);          // fonctionne partout

// Quand un comportement diffère vraiment, on teste la version, une seule fois
if (version_compare(_PS_VERSION_, '8.0.0', '>=')) {
    // chemin PrestaShop 8
} else {
    // chemin PrestaShop 1.7
}

Sources

  1. Documentation développeur PrestaShop 8, changements pour les modules devdocs.prestashop-project.org