hishikdi Posted July 4, 2013 Share Posted July 4, 2013 Bonjour, Actuellement en développement d'un projet d'E-Boutique j'aurai bien besoin d'un coup de pouce. Je cherche à afficher un nombre de produits dans une catégorie différent du nombre par défaut. Par exemple : par défaut ma catégorie affiche 20 produits. Mais j'aimerai que ma catégorie "Y" en affiche 100 de base. Y a-t'il une solution à ce problème? Merci d'avance pour vos réponses. Cordialement. Link to comment Share on other sites More sharing options...
hishikdi Posted July 19, 2013 Author Share Posted July 19, 2013 un petit up en espérant que quelqu'un est une solution . Link to comment Share on other sites More sharing options...
laruekev Posted August 1, 2013 Share Posted August 1, 2013 (edited) Bonjour hishikdi, J'avais le même problème, je voulais afficher tout les produits pour une categorie "Y". J'ai néanmoins trouvé une solution (un peu bidouillé et pas très propre mais ça marche). Dans le FrontController.php, je la surcharge (pour ne pas être embêter lorsqu'il y aura une mAJ), je rajoute dans la fonction pagination, une variable : $idCategory= substr($current_url, 1, 2); et je teste ensuite si l'id est égal à mon id categorie (celle dont je veux afficher tous les produits). si c'est le cas, je modifie la variable $this->n. if($idCategory=="53"){$this->n = 10000;} Voici ma fonction en entière avec l'id catégory qui est le 53. public function pagination($nbProducts = 10) { if (!self::$initialized) $this->init(); elseif (!$this->context) $this->context = Context::getContext(); $nArray = (int)Configuration::get('PS_PRODUCTS_PER_PAGE') != 10 ? array((int)Configuration::get('PS_PRODUCTS_PER_PAGE'), 10, 20, 50) : array(10, 20, 50); // Clean duplicate values $nArray = array_unique($nArray); asort($nArray); $this->n = abs((int)(Tools::getValue('n', ((isset($this->context->cookie->nb_item_per_page) && $this->context->cookie->nb_item_per_page >= 10) ? $this->context->cookie->nb_item_per_page : (int)Configuration::get('PS_PRODUCTS_PER_PAGE'))))); $this->p = abs((int)Tools::getValue('p', 1)); if (!is_numeric(Tools::getValue('p', 1)) || Tools::getValue('p', 1) < 0) Tools::redirect(self::$link->getPaginationLink(false, false, $this->n, false, 1, false)); $current_url = tools::htmlentitiesUTF8($_SERVER['REQUEST_URI']); //delete parameter page $current_url = preg_replace('/(\?)?(&)?p=\d+/', '$1', $current_url); /************************************************/ /* Modification ici */ /* */ /************************************************/ $idCategory= substr($current_url, 1, 2); if($idCategory=="53"){$this->n = 10000;} $range = 2; /* how many pages around page selected */ if ($this->p < 0) $this->p = 0; if (isset($this->context->cookie->nb_item_per_page) && $this->n != $this->context->cookie->nb_item_per_page && in_array($this->n, $nArray)) $this->context->cookie->nb_item_per_page = $this->n; $pages_nb = ceil($nbProducts / (int)$this->n); if ($this->p > $pages_nb && $nbProducts <> 0) Tools::redirect(self::$link->getPaginationLink(false, false, $this->n, false, $pages_nb, false)); $start = (int)($this->p - $range); if ($start < 1) $start = 1; $stop = (int)($this->p + $range); if ($stop > $pages_nb) $stop = (int)$pages_nb; $this->context->smarty->assign('nb_products', $nbProducts); $pagination_infos = array( 'products_per_page' => (int)Configuration::get('PS_PRODUCTS_PER_PAGE'), 'pages_nb' => $pages_nb, 'p' => $this->p, 'n' => $this->n, 'nArray' => $nArray, 'range' => $range, 'start' => $start, 'stop' => $stop, 'current_url' => $current_url ); $this->context->smarty->assign($pagination_infos); } Edited August 1, 2013 by laruekev (see edit history) Link to comment Share on other sites More sharing options...
Sébastien L Posted July 29, 2014 Share Posted July 29, 2014 Bonjour hishikdi, J'avais le même problème, je voulais afficher tout les produits pour une categorie "Y". J'ai néanmoins trouvé une solution (un peu bidouillé et pas très propre mais ça marche). Dans le FrontController.php, je la surcharge (pour ne pas être embêter lorsqu'il y aura une mAJ), je rajoute dans la fonction pagination, une variable : $idCategory= substr($current_url, 1, 2);et je teste ensuite si l'id est égal à mon id categorie (celle dont je veux afficher tous les produits). si c'est le cas, je modifie la variable $this->n. if($idCategory=="53"){$this->n = 10000;}Voici ma fonction en entière avec l'id catégory qui est le 53. public function pagination($nbProducts = 10) { if (!self::$initialized) $this->init(); elseif (!$this->context) $this->context = Context::getContext(); $nArray = (int)Configuration::get('PS_PRODUCTS_PER_PAGE') != 10 ? array((int)Configuration::get('PS_PRODUCTS_PER_PAGE'), 10, 20, 50) : array(10, 20, 50); // Clean duplicate values $nArray = array_unique($nArray); asort($nArray); $this->n = abs((int)(Tools::getValue('n', ((isset($this->context->cookie->nb_item_per_page) && $this->context->cookie->nb_item_per_page >= 10) ? $this->context->cookie->nb_item_per_page : (int)Configuration::get('PS_PRODUCTS_PER_PAGE'))))); $this->p = abs((int)Tools::getValue('p', 1)); if (!is_numeric(Tools::getValue('p', 1)) || Tools::getValue('p', 1) < 0) Tools::redirect(self::$link->getPaginationLink(false, false, $this->n, false, 1, false)); $current_url = tools::htmlentitiesUTF8($_SERVER['REQUEST_URI']); //delete parameter page $current_url = preg_replace('/(\?)?(&)?p=\d+/', '$1', $current_url); /************************************************/ /* Modification ici */ /* */ /************************************************/ $idCategory= substr($current_url, 1, 2); if($idCategory=="53"){$this->n = 10000;} $range = 2; /* how many pages around page selected */ if ($this->p < 0) $this->p = 0; if (isset($this->context->cookie->nb_item_per_page) && $this->n != $this->context->cookie->nb_item_per_page && in_array($this->n, $nArray)) $this->context->cookie->nb_item_per_page = $this->n; $pages_nb = ceil($nbProducts / (int)$this->n); if ($this->p > $pages_nb && $nbProducts <> 0) Tools::redirect(self::$link->getPaginationLink(false, false, $this->n, false, $pages_nb, false)); $start = (int)($this->p - $range); if ($start < 1) $start = 1; $stop = (int)($this->p + $range); if ($stop > $pages_nb) $stop = (int)$pages_nb; $this->context->smarty->assign('nb_products', $nbProducts); $pagination_infos = array( 'products_per_page' => (int)Configuration::get('PS_PRODUCTS_PER_PAGE'), 'pages_nb' => $pages_nb, 'p' => $this->p, 'n' => $this->n, 'nArray' => $nArray, 'range' => $range, 'start' => $start, 'stop' => $stop, 'current_url' => $current_url ); $this->context->smarty->assign($pagination_infos); } Bonjour, Je viens de tester la méthode en overridant la classe FrontController.php, cependant, cela ne fonctionne pas. Je suis sur Prestashop 1.5.6 Sous quelle version cela fonctionnait-il chez toi ? Merci de ton retour, Cordialement slett 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