Récemment
-
multiples déclinaisons sur produit [RÉSOLU]
Bugs & Améliorations19 -
ONePageCheckout
BUG connus4 -
Informations générales
PhenixSuite2 -
timepicker absent dans le BO
Bugs & Améliorations11 -
Installation Phenixsuite depuis 1.6.1.24
Questions relatives à l'installation/upgrade4 -
Passage au Webp qui n'a pas fonctionné
Bugs & Améliorations11 -
erreur 500 module paypal
Bugs & Améliorations8 -
probleme page de commande ONE PAGE
Bugs & Améliorations3 -
Traduction module Colissimo en admin
Bugs & Améliorations2 -
Erreur module block_cart en php8.2 mais pas en php7.4
Bugs & Améliorations14 -
Bug page de commande
Bugs & Améliorations4 -
Nouveautés possibles ?
Nouvelles fonctionnalités2 -
bug installation bdd
Questions relatives à l'installation/upgrade26 -
Configuration de wamp compatible presta.1.6.1.24 et PhenixSuite 1.6.2.25
Discussion générale61 -
Responsive sur liste des produits dans les commandes
Bugs & Améliorations2 -
affichage incorrect de produit personnalisé au panier
Bugs & Améliorations3 -
Erreur PHP à l'installation du module cedconnector
Bugs & Améliorations2 -
Problème calcul HT
Bugs & Améliorations18 -
MAJ .htaccess Apache 2.4 et 2.2
Nouvelles fonctionnalités5 -
Erreur SQL 1.6.2.23 -> 1.6.2.25
Questions relatives à l'installation/upgrade2
[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)