Récemment
-
Images produit qui disparaissent
Bugs & Améliorations il y a environ un jour15 -
Urls bizarres dans la console search
PhenixSuite il y a environ 5 jours12 -
Erreurs 410 dans BO
PhenixSuite il y a environ 5 jours3 -
la classe search
Bugs & Améliorations il y a environ 7 jours2 -
Probleme depuis MAJ phenix 1.6.2.36
PhenixSuite il y a environ 7 jours8 -
[resolu] Le module mondial relay 3.4.5
Bugs & Améliorations il y a environ 10 jours1 -
controlleur fournisseurs.
Bugs & Améliorations il y a environ 12 jours11 -
J'en profite (la fougue de la jeunesse) (ah ah ah)
Bugs & Améliorations il y a environ 13 jours5 -
Bon dernier du jour mais cela me turlupine classe search
Bugs & Améliorations il y a environ 13 jours4 -
se connecter comme un client idntifié
Bugs & Améliorations il y a environ 13 jours1 -
la bonne blague
Discussion générale il y a environ 15 jours2 -
Passage de la 16.1.9 a la PhenixSuite 1.6.2.36
Bugs & Améliorations il y a environ 19 jours8 -
Echec de l'installation de Creative Elements
Bugs & Améliorations il y a environ 26 jours3 -
[Résolu] Modification données client dans l'admin
PhenixSuite il y a environ 26 jours10 -
googletagmanager
PhenixSuite il y a environ 27 jours2 -
2 téléphones obligatoires
PhenixSuite 21 juin 2025, 21:5411 -
Liens qui disparaissent
PhenixSuite 21 juin 2025, 17:545 -
Smart cache JS et Iphone
PhenixSuite 20 juin 2025, 23:121 -
Hack ancien PS 1.6 avant mise à jour Phenix
PhenixSuite 16 juin 2025, 07:423 -
[RESOLU]Souci Revolut et Hipay
Modules 14 juin 2025, 18:5511
[1.3] Implanter des classes overrides
-
Le mécanisme des overrides est très pratique pour maintenir le coeur propre tout en ayant la capacité de faire des changements dans le code natif.
Ce mécanisme n'est apparu qu'a partir de la version 1.4 de PrestaShop.Voici une implantation de ce mécanisme sur version antérieure.
Il suffit d'injecter une fonction autoloader modifié en début du fichier config.inc.php
/* Autoload */ function __autoload($className) { if (function_exists('smartyAutoload') AND smartyAutoload($className)) return true; $className = str_replace(chr(0), '', $className); $classDir = dirname(__FILE__).'/../classes/'; $overrideDir = dirname(__FILE__).'/../override/classes/'; $file_in_override = file_exists($overrideDir.$className.'.php'); $file_in_classes = file_exists($classDir.$className.'.php'); // This is a Core class and its name is the same as its declared name if (substr($className, -4) == 'Core') require_once($classDir.substr($className, 0, -4).'.php'); else { if ($file_in_override && $file_in_classes) { require_once($classDir.str_replace(chr(0), '', $className).'.php'); require_once($overrideDir.$className.'.php'); } elseif (!$file_in_override && $file_in_classes) { require_once($classDir.str_replace(chr(0), '', $className).'.php'); $classInfos = new ReflectionClass($className.((interface_exists($className, false) or class_exists($className, false)) ? '' : 'Core')); if (!$classInfos->isInterface() && substr($classInfos->name, -4) == 'Core') eval(($classInfos->isAbstract() ? 'abstract ' : '').'class '.$className.' extends '.$className.'Core {}'); } elseif ($file_in_override && !$file_in_classes) require_once($overrideDir.$className.'.php'); } } spl_autoload_register('__autoload');
Créer ensuite votre répertoire /override/classes
Pour toute classe que vous souhaitez modifier, changez le nom de la classe native dans son fichier pour la renommer en <class>Core
Exemple pour la classe "Order":class OrderCore extends ObjectModel
Puis créer votre fichier override comme dans les version ultérieures.
Pratique pour normaliser tranquillement votre code en prévision d'une future migration
NOTE: Lors de votre upgrade, prenez garde à la structure du répertoire classes (ex: Order.php => order/Order.php)