Jump to content

[RESOLU]1.7.6.2 - problème avec les filtres lors d'une surcharge d'un ModuleAdminController


PL Watrin

Recommended Posts

Bonjour,

j'ai eu besoin de surchargé un ModuleAdminController contenant une liste et les filtres ne fonctionnaient pas correctement.

Une fois une recherche faite, plus moyen de réinitialiser la recherche et le champ de recherche ne contenait pas la valeur du filtre.

Si aucun résultat ne correspondait à la recherche, l'entête de la liste disparaissait et on se retrouvait donc complètement bloqué et obligé de vider les cookies pour retrouver la liste non filtrée.

Le problème vient du calcul du préfix utilisé pour stocker la valeur du filtre dans les cookies.

 

Dans le helpler  HelperList, le préfix est calculé en fonction du nom du controller (ligne 656) : 

$prefix = isset($this->controller_name) ? str_replace(array('admin', 'controller'), '', Tools::strtolower($this->controller_name)) : '';

Pour un controller nommé AdminMonModuleController, le préfix généré est : monmodule

 

Dans la classe AdminController, il y a 2 fonctions qui calculent le préfix, une pour les filtres et une pour les tris.

Hors, dans ces 2 fonctions, le préfix est calculé en fonction du nom de la classe et non en fonction du nom du controller.

protected function getCookieFilterPrefix()
{
	return str_replace(array('admin', 'controller'), '', Tools::strtolower(get_class($this)));
}

protected function getCookieOrderByPrefix()
{
	return str_replace(array('admin', 'controller'), '', Tools::strtolower(get_class($this)));
}

Comme le nom de ma classe est : AdminMonModuleControllerOverride, le préfix généré est monmoduleoverride et non monmodule

J'ai corrigé le problème en faisant un override de la classe AdminController dans lequel je modifie les 2 fonctions concernées.

protected function getCookieOrderByPrefix()
{
	$controllerName = $this->controller_name != '' ? $this->controller_name : get_class($this);
	return str_replace(array('admin', 'controller'), '', Tools::strtolower($controllerName));
}

protected function getCookieFilterPrefix()
{
	$controllerName = $this->controller_name != '' ? $this->controller_name : get_class($this);
	return str_replace(array('admin', 'controller'), '', Tools::strtolower($controllerName));
}

 

Toutes les listes des controllers étendant la classe AdminController fonctionnent correctement avec cette surcharge.

 

 

Edited by PL Watrin
flag résolu (see edit history)
Link to comment
Share on other sites

  • PL Watrin changed the title to [RESOLU]1.7.6.2 - problème avec les filtres lors d'une surcharge d'un ModuleAdminController

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...