Erikku Posted August 19, 2012 Share Posted August 19, 2012 Quel est l'interet des classes dans \override? On a la un repertoire qui ne contient que des classes vides. Et il semblerait que presque chaque class xxxCore derive d'une de ces classes. Du coup, si vous prenez par exemple IndexControllerCore, il a 4 classes parentes dont 2 vides: ControllerCore ↑ Controller (vide) ↑ FrontControllerCore ↑ FrontController (vide) ↑ IndexControllerCore Link to comment Share on other sites More sharing options...
J. Danse Posted August 19, 2012 Share Posted August 19, 2012 Pour être franc, je ne sais pas pourquoi elles sont mises là par défaut mais ça permet aussi à l'éditeur de code de modifier le bon fichier avec une structure de base Link to comment Share on other sites More sharing options...
mexique1 Posted August 20, 2012 Share Posted August 20, 2012 Ces classes sont là pour éviter de faire des appels à file_exists, qui est connu pour etre couteux Link to comment Share on other sites More sharing options...
Erikku Posted August 20, 2012 Author Share Posted August 20, 2012 Ces classes sont là pour éviter de faire des appels à file_exists, qui est connu pour etre couteux A quel niveau, je comprends pas..? Link to comment Share on other sites More sharing options...
mexique1 Posted August 20, 2012 Share Posted August 20, 2012 Moué en fait je pensais ça mais non, voir Autoload :: load(). Pour moi le seul intérêt, c'est de toujours utiliser la classe fille. Au pire, elle est vide, et uniquement les fonctionnalités de base sont utilisées. Mais en fait non // If $classname has not core suffix (E.g. Shop, Product) if (substr($classname, -4) != 'Core') { // If requested class does not exist, load associated core class if (isset($this->index[$classname]) && !$this->index[$classname]) { require_once($this->root_dir.$this->index[$classname.'Core']); if (file_exists($this->root_dir.'override/'.$this->index[$classname.'Core'])) { $this->generateIndex(); require_once($this->root_dir.$this->index[$classname]); } else { // Since the classname does not exists (we only have a classCore class), we have to emulate the declaration of this class $class_infos = new ReflectionClass($classname.'Core'); eval(($class_infos->isAbstract() ? 'abstract ' : '').'class '.$classname.' extends '.$classname.'Core {}'); } } else { // request a non Core Class load the associated Core class if exists if (isset($this->index[$classname.'Core'])) require_once($this->root_dir.$this->index[$classname.'Core']); if (isset($this->index[$classname])) require_once($this->root_dir.$this->index[$classname]); } } // Call directly ProductCore, ShopCore class else require_once($this->root_dir.$this->index[$classname]); Link to comment Share on other sites More sharing options...
Raphaël Malié Posted August 20, 2012 Share Posted August 20, 2012 (edited) Bonjour, avant cette modification (l'ajout des classes filles vides), l'autoload créait "virtuellement" ces classes via un eval. Cette modification a été faîte pour ces raisons : - Permettre aux IDE de faire de l'autocomplétion afin de faciliter la vie des développeurs - Optimiser la mémoire et la rapidité de l'autoload - Permettre aux développeurs de plus facilement voir et utiliser le système d'override (trop peu connaissaient son existence, ou savaient comment l'utiliser) - Supprimer cet affreux eval Cordialement Edited August 20, 2012 by Raphaël Malié (see edit history) 1 Link to comment Share on other sites More sharing options...
J. Danse Posted August 20, 2012 Share Posted August 20, 2012 (edited) Merci. Réponse très claire... Et j'appécie surtout: - Permettre aux IDE de faire de l'autocomplétion afin de faciliter la vie des développeurs Je me demande pourquoi ! Edited August 20, 2012 by J. Danse (see edit history) Link to comment Share on other sites More sharing options...
mexique1 Posted August 20, 2012 Share Posted August 20, 2012 Bon j'avais partiellement raison Link to comment Share on other sites More sharing options...
Erikku Posted August 20, 2012 Author Share Posted August 20, 2012 (edited) Je n'ai pas encore trop regardé l'Autoload, mais que ces classes soient générées ou ajoutées comme elles le sont maintenant, quelle est leur utilité? C'est quoi que tu appelles le 'systeme d'override'? Edited September 6, 2012 by Erikku (see edit history) Link to comment Share on other sites More sharing options...
Raphaël Malié Posted August 20, 2012 Share Posted August 20, 2012 Le principe c'est de permettre aux développeurs de faire du développement spécifique sans toucher au cœur de PrestaShop. Par exemple si tu prends la méthode Link->getPageLink(), imagine que tu as besoin pour ton projet de faire en sorte qu'elle fasse quelque chose de spécial, il te suffit de la surcharger. Donc dans ce cas tu vas dans le fichier overrides/classes/Link.php et tu ajoutes dans la classe une méthode comme ça : public function getPageLink() { // traitement spécifique return parent::getPageLink(); } Link to comment Share on other sites More sharing options...
Prestaspirit Posted October 8, 2012 Share Posted October 8, 2012 (edited) Bonjour, Dommage que les développeurs n'ont pas prévu qu'il n'était pas les seuls à utiliser des classes "Core", ça m'aurait évité quelques problèmes d'inclusion du sdk d'Amazon. Comme l'autoload n'est pas lui-même surchargeable et que le sdk d'Amazon possède son propre chargement de classe ont se retrouve avec une belle Fatal error lors du chargement du "RequestCore". Je n'ai pas trouvé d'autre solution ce que modifier la classe "Autoload" si vous avez une autre solution je suis preneur. merci Edited October 8, 2012 by Prestaspirit (see edit history) Link to comment Share on other sites More sharing options...
Raphaël Malié Posted October 8, 2012 Share Posted October 8, 2012 Si vous utilisez la version 1.5, normalement vous pouvez parfaitement gérer l'autoload d'Amazon avec les fonctions SPL de l'autoload (spl_autoload_register notamment). Cordialement Link to comment Share on other sites More sharing options...
Prestaspirit Posted October 8, 2012 Share Posted October 8, 2012 Bonjour Raphaël, Effectivement en passant le paramètre "prepend" à true dans la fonction "spl_autoload_register" du sdk d'amazon ça passe tous seul. Merci pour ton conseil Raphaël. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now