Récemment
-
Aperçu de l'activité dans le dashboard vide
Bugs & Améliorations29 -
Tri par code de réduction (Commandes) [RÉSOLU]
Bugs & Améliorations5 -
Uncaught Error: Call to a member function rowCount() on bool [RÉSOLU]
Bugs & Améliorations4 -
Navigation à facettes
Bugs & Améliorations8 -
Calcul des règles paniers HT/TTC [RÉSOLU]
Bugs & Améliorations44 -
Erreur lors d'une nouvelle installation depuis 0
Questions relatives à l'installation/upgrade24 -
Bug avec le module de paiement epayment
Bugs & Améliorations2 -
Changement statut de commande [RÉSOLU]
Bugs & Améliorations3 -
Prévisions sur le tableau de bord vide [RÉSOLU]
Bugs & Améliorations8 -
Nouvelle attaque ?
Discussion générale10 -
À partir de (from_price) [RÉSOLU]
Bugs & Améliorations11 -
Override AdminCustomersController [RÉSOLU]
Bugs & Améliorations11 -
Logo Phenix erreur 404 en BO
Bugs & Améliorations8 -
Bug Preventing eMail Delivery in at least 1.6.2.16 up to 1.6.2.19 (Probably much more)
Bugs & Améliorations3 -
1.6.2.19 - Erreur sur le module Editeur de page d'accueil
Bugs & Améliorations4 -
warning SQL ( debug activé ) dans Search.php
PhenixSuite6 -
Module PSitechecklist Facilitez la compréhension des retours clients.
Modules1 -
module moneticoPaiement
PhenixSuite2 -
Copieurs-Colleurs
Discussion générale3 -
règle prix catalogue et mise à jour panier
Bugs & Améliorations7
[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)