Jump to content

Affichage d'une nombre de produits dans une catégorie différent du nombre par défaut


Recommended Posts

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

  • 2 weeks later...
  • 2 weeks later...

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

  • 11 months later...

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

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