Quentin M Posted November 5, 2015 Share Posted November 5, 2015 (edited) Bonjour, Je travail depuis peu sur prestashop, et commence donc à bien mettre les mains dedans ! A 2 reprises (pour 2 projets différents) , j'ai été confronté à un problème qui me semble problématique. Je n'ai pas trouvé de solution miracle (propre ^^). Voici mon besoin : Pour mon client, je souhaite modifier, de façon profonde et/ou superficielle, l'affichage d'un formulaire en administration. Je souhaite réaliser cela via un module, car il y a des dépendances avec des fonctionnalités front. Les solutions que j'ai trouvé : Ajouter le tpl directement dans '/override' : Ne me convient pas, car je souhaite avoir un module indépendant. En fonction de la vue, ajouter des tpls à la suite de l'existant : Ne me convient pas, car selon le cas, je peux être amené à ajouter ma modification en milieu de tpl Il existe la possibilité d'étendre le tpl, mais pas encore disponible dans les templates d'admin semble-t-il, et ne permet pas de choisir l'emplacement Voila, j'ai donc essayé de creuser un peu, et voici ce que j'ai trouvé. Si je surcharge le tpl depuis le module, celui-ci n'est pas copié dans '/override', car l'autoload de prestashop s'occupant de gérer override ne prend en charge que les class php. Le fichier s'occupant du choix du tpl est situé dans '/classes/helper/Helper.php', dans la méthode createTemplate. Ce qui m'étonne, c'est que ce fichier semble bien être prévu pour charger un tpl depuis un module : $override_tpl_path = _PS_MODULE_DIR_.$this->module->name.'/views/templates/admin/_configure/'.$this->base_folder.$tpl_name; Le souci, c'est que pour rentrer dans ce cas, il faut que $this->module soit setté, ce qui n'est pas le cas. Une solution possible : En bidouillant un peu dans mon module, j'ai donc réussi à setter mon module, mais pas de la manière dont je l'aurais souhaité (pas très propre). J'ai surchargé la méthode 'renderForm' de la class 'classes/controller/AdminController.php'. Juste après le chargement du helper : $helper = new HelperForm($this); Je viens ajouter ensuite : if ($this instanceof AdminWebserviceController) { $module = Module::getInstanceByName($this->module); $helper->module = $module; } En ayant au préalable setté '$this->module' dans la surcharge du contructeur avec le nom de mon module. Le résultat est le bon, mais j'aimerais améliorer cela en étant plus flexible/maintenable. En effet, ce fonctionnement n'est pour le moment valable que pour un module (si je fais dans 2 modules, je vais avoir un souci dans mon override de 'AdminController.php'). Peut-être que je me trompe complètement de chemin? Avez vous des solutions à m'apporter? Merci pour toute l'aide que vous pourrez m'apporter. Quentin EDIT : En fait, j'ai bien une solution qui fonctionnerait mieux, mais la question est de savoir si je suis sur la bonne voie. Cette solution serait : Nous sommes quoiqu'il en soit amené à surcharger le controller de l'admin que nous souhaitons modifier. J'ajouterais donc une méthode du type : 'setMyModule' renvoyant NULL dans la class 'AdminController'. Il suffirait ensuite, dans l'extension de notre controller du type 'AdminWebserviceController' pour respecter l'exemple précédent, de renvoyer l'instance de mon module à la méthode 'setMyModule'. Je reste cependant obligé de surcharger la méthode 'renderForm' de 'AdminController' pour appeler ma méthode 'setMyModule' du type : $helper->module = $this->setMyModule(); Edited November 5, 2015 by Quentin M (see edit history) Link to comment Share on other sites More sharing options...
Quentin M Posted November 13, 2015 Author Share Posted November 13, 2015 Bonjour, Je me permet un petit UP, ceci me parait être un point important Merci à vous ! 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