Jump to content

prestashop 1.5 helperlist fonctionne mais pas le filtre


Recommended Posts

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 by phili_b (see edit history)
Link to comment
Share on other sites

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

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

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

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

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

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

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

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

  • 5 months later...

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

  • 4 months later...

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...