XIV-V Posted August 30, 2012 Share Posted August 30, 2012 (edited) Bonjour, J'ai besoin de votre bienveillance. Je me doute que la réponse doit être assez simple, mais j'ai un problème ! J'ai l'expérience sur prestashop 1.3, mais je suis inexpérimenté avec la surcharge des classes. Là je bosse sur la 1.5. Un essayant de surcharger un controleur grâce à un module (perso), j'obtiens une erreur suivante lorsque j'installe le module : Fatal error : Cannot redeclare AdminCmsCategoriesControllerOverrideOriginal::$cms_category in /.../htdocs/classes/module/Module.php(1860) : eval()'d code on line 16 J'essaie donc de surcharger le fichier suivant : /controllers/admin/AdminCmsCategoriesController.php (nom de classe : AdminCmsCategoriesControllerCore) Le but de l'exercice étant de pouvoir ajouter un champ aux catégories de pages CMS dans le backoffice. Comme expliqué ici : http://doc.prestasho...fault+behaviors In order to override the ProductController class, your file needs to be called ProductController.php and must feature aProductController class that the extends ProductControllerCore class.The file can be placed in either of these locations: /override/controllers/ProductController.php /modules/my_module/override/controllers/ProductController.php J'ai mon module avec le répertoire override : /modules/monmodule/override/controllers/admin/AdminCmsCategoriesController.php Voici le contenu de mon fichier : class AdminCmsCategoriesController extends AdminCmsCategoriesControllerCore {} Dois-je renommer la classe équivalente qui se trouve dans /override/admin/ ? Si je le fait, le module ne s'installe pas pour autant car la fonction Module->addOverride() retourne false à la ligne 1855 (du fichier Module.php) : if (!is_writable($override_path)) Qui teste si le fichier que je viens de renommer est bien là. En d'autres mots, soit il ne trouve pas le fichier, soit s'il le trouve, il déclare 2 fois la classe... Merci d'avance de votre aide Edited August 30, 2012 by XIV-V (see edit history) Link to comment Share on other sites More sharing options...
coeos.pro Posted August 30, 2012 Share Posted August 30, 2012 ton fichier est vide ? enfin je veux dire sans fonctions ? Link to comment Share on other sites More sharing options...
XIV-V Posted August 30, 2012 Author Share Posted August 30, 2012 (edited) Oui, à la base j'avais copié la classe mère, mais pour l'exemple j'ai tout supprimé, donc il utilise par défaut les fonctions de sa classe mère. Le problème reste le même que je surcharge les fonctions ou non -> classe déjà déclarée. Edited August 30, 2012 by XIV-V (see edit history) Link to comment Share on other sites More sharing options...
XIV-V Posted August 31, 2012 Author Share Posted August 31, 2012 (edited) J'ai résolu mon problème, mais de manière peu maîtrisée. En étudiant mieux ce que faisait la méthode Module::addOverride(), je me suis aperçu qu'il modifiait la class /override/controllers/admin/xxx.php en y ajoutant les méthodes de ma classe perso qui se trouve dans /modules/monmodule/override/admin/xxx.php Et je pense qu'à la désinstallation aussi. Sauf que succédant les installs et désinstalls de mon module, j'ai dû créer des abérations, il ne désinstallait pas les méthodes qu'il avait installé, ce qui devait provoquer ce redéclare. Dû coup j'ai restauré ma class /override/controllers/admin/xxx.php pour qu'elle soit à nouveau vide, et désormais l'install et la désinstall de mon module fonctionne bien (avec la surcharge qui va avec). Ah les nuits de sommeil portent conseil edit : euh, où est-ce que je peux changer le statut du topic ? Edited August 31, 2012 by XIV-V (see edit history) 2 Link to comment Share on other sites More sharing options...
belew Posted October 4, 2012 Share Posted October 4, 2012 Bonjour, J'ai le même probleme que toi cependant le faite du supprimer le fichier surchargé ne regle pas le probleme aurais tu omis de détailler quelque chose ? ++ Link to comment Share on other sites More sharing options...
XIV-V Posted October 8, 2012 Author Share Posted October 8, 2012 Je n'ai pas supprimé de fichier. Ce que j'ai fait c'est que j'ai restauré le fichier qui se trouve dans override comme à l'origine, c'est à dire la déclaration de la classe sans le moindre attribut ni méthode. Ceci, après avoir désinstallé le module. Link to comment Share on other sites More sharing options...
wurzag Posted March 22, 2013 Share Posted March 22, 2013 (edited) Même problème ici. Le fichier original est bien vide cependant j'ai toujours cette erreur... EDIT : J'ai trouvé la cause du problème. Je décris ici cela peut servir à d'autre. Mon code d'installation ressemblait à qqch comme ca : return parent::install() && $this->installOverrides() && $this->installDB(); Or il s'avère que "$this->installOverrides()" est déjà appelé par "parent::install()". Du coup la première fois il créer l'override correctement mais la 2eme il plantait car la classe existait déjà. Voila. Edited March 25, 2013 by wurzag (see edit history) 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