phili_b Posted July 25, 2013 Share Posted July 25, 2013 (edited) Bonjour, Je m'initie à prestashop et j'ai commencé par la 1.5. J'essaye donc de comprendre les helpers du backoffice. Je me suis fait un petit module basé sur les helperform et ça marche très bien. De même j'ai implementé un helperlist qui appelle le helperform et ça marche. En revanche quand je mets simple_header = true, les tris, filtres ne fonctionnent pas. $helper = new HelperList(); $helper -> simple_header = true; Y'a-t-il une doc plus détaillée que Doc.prestashop.com/PS15/HelperList ? Une autre façon de poser ma question, pour voir si c'est lié à mon code : comment corriger blockreinsurance avec simple_header=true, au lieu de false comme par défaut dans ce module, pour que les filtres fonctionnent ? Merci d'avance. Edited July 25, 2013 by phili_b (see edit history) Link to comment Share on other sites More sharing options...
J. Danse Posted July 26, 2013 Share Posted July 26, 2013 Alors, ... Le problème vient surement bien du code mais pas du tiens (enfin, ... je veux dire par là que les modifications apportées ne sont pas la cause du soucis. C'est juste qu'il manque certaines choses). Donc, il faut bien entendu (comme dis) faire cette modification: $helper = new HelperList(); $helper -> simple_header = true; // false à true Ensuite, ... Il faut avoir en tête que le HelperList est utilisé à travers un module et détourné de son fonctionnement classique. J'entends par là que, par exemple, on peut voir à la L199 que l'on transmet une liste qui ne gère pas l'ensemble du mécanisme de tri. C'est donc au sein de cette méthode que l'on doit travailler le filtre. Je t'en propose cette modification: protected function getListContent($id_lang) { $sql = ' SELECT r.`id_reinsurance`, r.`id_shop`, r.`file_name`, rl.`text` FROM `'._DB_PREFIX_.'reinsurance` r LEFT JOIN `'._DB_PREFIX_.'reinsurance_lang` rl ON (r.`id_reinsurance` = rl.`id_reinsurance`) WHERE `id_lang` = '.(int)$id_lang.' '.Shop::addSqlRestrictionOnLang(); if(Tools::getIsset('submitFilter')) { foreach($this->fields_list as $f => $field) { $filter = Tools::getValue('blockreinsuranceFilter_'.$f); if(!isset($field['lang'])) $sql .= ' AND r.`'.$f.'` LIKE "%'.$filter.'%"'; else $sql .= ' AND rl.`'.$f.'` LIKE "%'.$filter.'%"'; } } return Db::getInstance()->executeS($sql); } A savoir, également, qu'il faut modifier le $this->field_list initialisé dans initList() par ceci: $this->fields_list = array( 'id_reinsurance' => array( 'title' => $this->l('Id'), 'width' => 120, 'type' => 'text', ), 'text' => array( 'title' => $this->l('Text'), 'width' => 140, 'type' => 'text', 'lang' => true, ), ); Link to comment Share on other sites More sharing options...
phili_b Posted July 26, 2013 Author Share Posted July 26, 2013 Les filtres marchent Ça m'a permis de comprendre le fonctionnement pour les tris (voir source en dessous). En fait j'avais regardé 2 modules PS1.5 avec helper, dont le tien sur ce forum, mais je n'arrivais pas à faire la part des choses entre les améliorations du controller et le fonctionnement de base. Toute la construction de l'url est faite par le helper de base, que ça soit pour les filtres et le tri, mais pour le traitement de données, il faut le rajouter à la main. Merci Plus qu'à l'appliquer sur mon module. Le mot clé filter_key, vu dans la doc, m'a induit en erreur. Il sert à quelque chose ? protected function getListContent($id_lang) { //26/7/2013 création nécessaire aux filtres helperlist if(Tools::getIsset('submitFilter')) { foreach($this->fields_list as $f => $field) { $filter = Tools::getValue('blockreinsuranceFilter_'.$f); if(!isset($field['lang'])) $sql .= ' AND r.`'.$f.'` LIKE "%'.$filter.'%"'; else $sql .= ' AND rl.`'.$f.'` LIKE "%'.$filter.'%"'; } } //26/7/2013 création nécessaire aux tris helperlist if(Tools::getIsset('blockreinsuranceOrderby')) { $sql .= 'ORDER BY '. Tools::getValue('blockreinsuranceOrderby'). ' '.Tools::getValue('blockreinsuranceOrderway'); } return Db::getInstance()->executeS($sql); } Link to comment Share on other sites More sharing options...
Matt75 Posted July 26, 2013 Share Posted July 26, 2013 Humm normalement tu n'as pas besoin de faire cela, si tu regardes dans la class AdminController tu as déjà des méthodes pour gérer ça. /** * Set the filters used for the list display */ public function processFilter() Si cela ne marche pas de base, vérifie si tu as correctement initialisé ton controller car chez moi cela fonctionne très bien dans mes ModuleAdminController, je n'ai pas eut besoin d'écrire mes propres méthodes... Link to comment Share on other sites More sharing options...
J. Danse Posted July 26, 2013 Share Posted July 26, 2013 Il ne s'agit pas d'un controller, mais d'un module. C'est là le hic. L'idée, c'est qu'il ne faut pas ré-écrire cela à la main mais ici c'est bien différent. Fort différent, même ;-) Pour le filter_key, il est utile oui (même si erroné dans le code du module). Mais dans le cas présent, j'ai moi-même pris le dessus sur ce problème dans le code proposé. Evidemment, ça ne fonctionne que pour ce module ci ;-) Link to comment Share on other sites More sharing options...
Matt75 Posted July 26, 2013 Share Posted July 26, 2013 Mais dans ce cas je ne pense pas qu'il soit particulièrement adapter de faire appel au helper list dans un module, la page de configuration du module devrait rester uniquement une page de configuration avec un formulaire simple (Perso j'utilise helper form) et tout ce qui est affichage de liste et autres actions devraient logiquement se trouver dans un controller pour interagir avec un ObjectModel... On peut même ajouter un lien vers le controller dans la page de configuration si on utilise helper form, on ajoute le lien dans la toolbar... C'est pour afficher quoi ton helper list ? La création d'un controller me semble plus approprié mais bon peut être que dans un cas spécifique... Link to comment Share on other sites More sharing options...
J. Danse Posted July 26, 2013 Share Posted July 26, 2013 On est d'accord. Et je crois qu'on ne discutera pas là-dessus. Si ce n'est, que dans son plus simple appareil le HelperList fonctionner très bien pour l'affichage du tableau. Donc, ce n'est pas un soucis de l'utiliser. Il faut aussi bien remettre les choses dans le contexte: on parle d'un module natif. Son idée est, je pense, de le modifier pour tester le comment du pourquoi et voir le fonctionnement (et profiter d'une fonctionnalité existante permettant de filtrer les entrées du modules réassurances, simplement). Link to comment Share on other sites More sharing options...
Matt75 Posted July 26, 2013 Share Posted July 26, 2013 Tiens je connaissais pas ce module, je trouve assez stupide d'avoir mis ça dans le Module plutot que dans un Controller... Ils ont un ObjectModel et ils n'utilisent pas un Controller pour le gérer... C'est assez moyen quand même... Link to comment Share on other sites More sharing options...
phili_b Posted July 26, 2013 Author Share Posted July 26, 2013 En fait j'ai commencé à modifier le module blockreinsurance pour me faire les dents. Et ensuite j'ai fait un petit module de A à Z en m'inspirant de blockreinsurance seulement pour la structure. C'est à dire que j'utilise les class ObjectModel et Module mais pas ModuleController puisque de base, excepté ce souci de filtre et de tri, il semblait répondre à des listes et formulaires simples et surtout que ne le voyant pas dans blockinsurance il ne me semblait pas nécessaire. Faudrait que je vois dans un autre cas comment l’architecturer avec le reste si besoin. Link to comment Share on other sites More sharing options...
ChDUP Posted December 28, 2013 Share Posted December 28, 2013 Je me permets ce petit déterrage car j'ai un problème qui se rapproche de celui de phili_b à mon avis. Dans la partie "config" d'un module j'affiche un HelperList. (c'est une liste de commandes) Et le HelperList génère automatiquement un lien sur chaque ligne du HelperList. Le lien correspond à ce que je comprend à l'action "modifier". Mais je ne comprend pas comment gérer ce qui doit se passer au clic ? En l'occurence, j'aimerai renvoyer vers le détail de la commande en question. La doc est vraiment pauvre à ce sujet. Merci d'avance Link to comment Share on other sites More sharing options...
Ben@CafeProd Posted May 19, 2014 Share Posted May 19, 2014 J'ai plus ou moins le même problème en ce qui concerne les helpers. Impossible de les faire fonctionner dans un module. Pour ce qui est de mettre les helpers dans les controllers, je veux bien mais la doc est tellement évasive que je ne trouve pas d'autre solution que de tout faire à la main dans le module. 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