Récemment
-
MAJ .htaccess Apache 2.4 et 2.2
Nouvelles fonctionnalités1 -
Erreur - Le template d'e-mail suivant n'existe pas : /mails/fr/password_code.html [RÉSOLU]
Bugs & Améliorations3 -
Soucis ps_checkout (admin et front)
Bugs & Améliorations9 -
Erreur module block_cart en php8.2 mais pas en php7.4
Bugs & Améliorations7 -
Problème calcul HT
Bugs & Améliorations16 -
Erreur SQL sur le Liens Modules et Service après upgrade a 1.6.2.25
Questions relatives à l'installation/upgrade3 -
Erreur SQL sur la requête The used table type doesn't support FULLTEXT indexes
Questions relatives à l'installation/upgrade3 -
Maj de 1.6.1.20 rien ne se passe
Questions relatives à l'installation/upgrade2 -
information mise en cache désactivée sur param 1-click-upgrade
Questions relatives à l'installation/upgrade3 -
Erreur SQL syntax at line 14
Questions relatives à l'installation/upgrade5 -
paramétrage des colonnes d'une commande en BO
PhenixSuite4 -
Meilleure config Système pour une installation fraiche en 2024?
Questions relatives à l'installation/upgrade3 -
Erreurs VS code Monetico (pour info )
PhenixSuite7 -
Search.php
PhenixSuite2 -
Error logs (null object)
Bugs & Améliorations37 -
Factures ne se génèrent plus depuis 06/12 [RÉSOLU]
Bugs & Améliorations14 -
Installation du module Mondial Relay
Bugs & Améliorations6 -
Aperçu de l'activité dans le dashboard vide [RÉSOLU]
Bugs & Améliorations33 -
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
[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)