Jump to content

une meilleure pagination


 Share

Recommended Posts

Salut à tous

C'est mon premier site avec prestashop, mais je suis programmeur PHP confirmé.
J'aimerais proposer un petit hack pour le système de pagination, s'il n'est pas déjà connu, si vous utilisez le nombre par défaut de produits à afficher sur une page et ce n'est pas 10 mais 12, 15, 16 etc.

Dans le fichier pagination.php

$nArray = intval(Configuration::get('PS_PRODUCTS_PER_PAGE')) != 10 ? array(intval(Configuration::get('PS_PRODUCTS_PER_PAGE')), 10, 20, 50) : array(10, 20, 50);
asort($nArray);



devient

$hack_products_per_page = intval(Configuration::get('PS_PRODUCTS_PER_PAGE'));
$nArray = array($hack_products_per_page, $hack_products_per_page * 2, $hack_products_per_page * 5);



C'est tout simple mais très utile à mon avis.
En faisant cette modification, une petite correction s'impose dans le template pagination.tpl

//{if $nb_products > 10}
{if $nb_products > $n}



J'espère que ça va en intéresser plus d'un, merci pour vos commentaires
Peace

Share this post


Link to post
Share on other sites

  • 1 month later...
  • 8 months later...

Bonjour et merci pour cette astuce c'est exactement ce que je recherchais.

 

Je suis actuellement en PS-1.4.4 et je me permet de mettre le topic à jour.

 

1.Ou est passé pagination.php ?

 

Il semble que pagination.php n'existe plus pour retrouver la fuction pagination() vous devez vous rendre dans :

 

/classes/FrontController.php (ligne 534 + ou -)

 

2. Syntaxe légèrement différente

 

Le seul changement que j'ai pu repéré c'est intVal qui devient (int)

 

nous avons donc ceci

		
$nArray = (int)(Configuration::get('PS_PRODUCTS_PER_PAGE')) != 10 ? array((int)(Configuration::get('PS_PRODUCTS_PER_PAGE')), 10, 20, 50) : array(10, 20, 50);
asort($nArray);

 

qui devient cela

 

$conf_prod_per_page = (int)(Configuration::get('PS_PRODUCTS_PER_PAGE'));	
$nArray =  array($conf_prod_per_page, $conf_prod_per_page * 2, $conf_prod_per_page * 5);
asort($nArray);

 

C'est des petits détails mais tant qu'à faire, autant les partager ^^

Share this post


Link to post
Share on other sites

Pour aller plus loin / utilisation d'une boucle

 

Je précise de suite que je ne suis pas un expert PHP, si vous avez des remarques ou que ma proposition vous semble aberrante (comme mon orthographe) je suis ouvert à la critique

 

Comme nous avons pu le voir plus haut, il peut être utile de personnaliser les options d'affichage du nombre de produits par page, en fonction du nombre de produit par page configurés dans l'admin.

 

J'ai imaginé la solution suivante

//Récupération du nombre de produits par page
$conf_prod_per_page = (int)(Configuration::get('PS_PRODUCTS_PER_PAGE'));

//Définir les multiplicateurs pour les option d'affichage
$conf_pagination_mult = array(1,2,4,10);

//Compter le nombre de multiplicateurs demandé
$conf_pagination_lenght = count($conf_pagination_mult);

//Définir nArray comme un tableau
$nArray = array();

//Faire une boucle avec le tout
for ($i = 0; $i < $conf_pagination_lenght; $i++) {
   $nArray[$i] = $conf_prod_per_page * $conf_pagination_mult[$i];
}

//Trier le résultat
asort($nArray);

 

J'espère que ma solution est correcte, si c'est le cas j'aimerais aller plus loin en pouvant définir le multiplicateur dans l'admin.

exemple :

- avoir un champ dans l'admin du type "définir les multiplicateurs de la pagination"

- dans se champ pouvoir placer les valeur "1,2,4,10" séparés par une virgule

- traité ses données pour obtenir une variable de configuration comme PS_PRODUCTS_PER_PAGE en tableau

- et dès lors plutôt que de placer les multiplicateurs en dur pouvoir les récupérer de manière dynamique

 

Quelqu'un à une piste pour moi ? (je rappel mon niveau de débutant et fait appel à votre clémence si ma demande n'à pas de sens)

 

Merci

Share this post


Link to post
Share on other sites

  • 11 months later...

salut à tous,

 

Je poste peut-etre au mauvais endroit même si ca concerne la pagination mais je n'arrive pas à trouver la solution:

voila, mon soucis est que quand je met 10 dans la liste de produits à afficher et que ma categorie ne contient que 8 produits, la pagination disparait.

Comment dois-je proceder pour que la pagination reste quand même.

 

Merci

Share this post


Link to post
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
 Share

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More