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.