Récemment
-
Un immense merci à Eolia et Doekia pour leur travail remarquable avec PhenixSuite
Discussion générale2 -
Warning: count(): Parameter must be an array or an object that implements Countable
Bugs & Améliorations3 -
Problème configuration php valeurs max-imput-vars
Bugs & Améliorations5 -
Nouvelle installation : erreur sur les ajouts d'images
Questions relatives à l'installation/upgrade11 -
Problème de lien vers tpl module custom
PhenixSuite3 -
Modification sur le thème "Craft"
Questions relatives à l'installation/upgrade3 -
Installation avec Wamp
Questions relatives à l'installation/upgrade1 -
date_upd produits
Bugs & Améliorations13 -
Champ description longue pour les catégories
Modules5 -
Erreurs suite à la mise à jour
Questions relatives à l'installation/upgrade10 -
Module personnalisation de produit
Modules3 -
Theme non fonctionnel - après MAJ de la Phenixsuite 1.6.2.32
Questions relatives à l'installation/upgrade13 -
TinyMCE
Bugs & Améliorations2 -
Déclinaisons virtuelles avec fichiers
PhenixSuite10 -
[RESOLU]Lien téléchargement dans le mail
Discussion générale6 -
[RESOLU]RGPD
Modules5 -
Compatibilité des modules
Discussion générale2 -
[RESOLU]Bug page Préférences Produits
Bugs & Améliorations4 -
htaccess chatouilleux ?
Bugs & Améliorations14 -
Installation depuis boutique 1.6.1.17
Questions relatives à l'installation/upgrade19
[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)