be_tnt Posted January 17, 2013 Share Posted January 17, 2013 Hello! Est-ce que quelqu'un a déjà essayer d'ajouter un nouveau hook à un module existant en utilisant la méthode d'override? Est-ce possible? J'ai PS 1.5.3 et j'ai beau essayé, cela ne semble pas fonctionner. Link to comment Share on other sites More sharing options...
math_php Posted January 18, 2013 Share Posted January 18, 2013 Bonjour, J'ai eu des problèmes avec les overrides mais c'était largement du au fait que la réinitialisation du module n'avait pas été faite. Sauf erreur de ma part lors de l'installation ou la ré initialisation du module, prestashop recopie les override vers le dossier override/classes ou override/controllers à la racine du site. Pour les hook ils doivent être 'enregistré' par registerHook, là aussi une réinitialisation s'impose ou un appel à registerHook. Link to comment Share on other sites More sharing options...
be_tnt Posted January 20, 2013 Author Share Posted January 20, 2013 (edited) Bonjour math_php! Merci pour ton feedback. Je viens de regarder de plus près le code de la classe Module.php. En PS 1.5.3.1, durant l'installation d'un module, la méthode installOverrides est appelée. public function installOverrides() { if (!is_dir($this->getLocalPath().'override')) return true; $result = true; foreach (Tools::scandir($this->getLocalPath().'override', 'php', '', true) as $file) { $class = basename($file, '.php'); if (Autoload::getInstance()->getClassPath($class.'Core') ) $result &= $this->addOverride($class); } return $result; } Celle-ci regarde dans $this->getLocalPath().'override' si il n'y a pas un fichier php. Disons qu'ici, j'essaie de surcharger la classe BlockPaymentLogo. Le getLocalPath donne: \modules\blockpaymentlogo\. Ensuite on obtient le nom de la classe en enlevant le .php. Dans mon cas, class=blockpaymentlogo. Ensuite on checke si le classpath (basé sur $class auquel on concatène 'Core') existe (enfin je pense que c'est ce que cela veut dire). Dans mon cas, c'est pas le cas ... parce que le class path ne finit pas par Core.(toujours si j'ai bien compris) .... D'après ce que je vois dans les fichiers classes pour les modules + la doc pour écrire un module, le nom de la classe pour un module ne contient jamais 'Core'. Donc je ne comprends pas vraiment le test exécuter .... Une idée? Edited January 20, 2013 by be_tnt (see edit history) Link to comment Share on other sites More sharing options...
J. Danse Posted January 20, 2013 Share Posted January 20, 2013 Il n'est pas possible de faire un override d'un module, en fait... Seulement de classes et de controllers. Link to comment Share on other sites More sharing options...
be_tnt Posted January 20, 2013 Author Share Posted January 20, 2013 donc la fonction InstallOverride() de la class Module.php ne sert à rien? Link to comment Share on other sites More sharing options...
NikosKos Posted January 20, 2013 Share Posted January 20, 2013 A mon avis cette fonction permet plutot de deployer les overrides des classes et des controllers qui seraient nécessaires au bon fonctionnement du module. Pour faire ce que tu demandes, il faut : 1- modifier le module et y ajouter la fonction hookNomDuNouveauHook 2- associer le module à ce hook dans l'onglet des positions 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