3 votes

pagination simple avec PHP

Je voudrais mettre en œuvre la pagination en PHP. J'ai un ensemble de résultats provenant de la base de données, que ce soit un tableau. J'ai besoin d'une pagination qui doit afficher 4 enregistrements par page et les numéros de page doivent être de la forme suivante

"<< 1,2,3.....20 >>"

et lorsque vous sélectionnez la page 2, le format doit être le suivant

"<< 3,4,5.....20 >>"

Pouvez-vous me suggérer des concepts de pagination pour mettre en œuvre ceci ?

3voto

Jacob Relkin Points 90729

Vous pouvez en fait utiliser le LIMIT dans SQL pour cela.

Aquí Vous trouverez un bon tutoriel pour vous aider à démarrer.

1voto

Regardez dans PEAR::Pager .

1voto

JAL Points 11164

Obtenir les résultats est assez simple, en utilisant la limite comme indiqué ci-dessus basée sur le numéro de page. Vous pouvez utiliser une boucle pour imprimer les numéros de page.

Tout d'abord, disons que le numéro de page est envoyé sous la forme page=2 dans la chaîne d'interrogation.

$pagenum=(int)$_GET['page'];
if($pagenum<1){ $pagenum=1; }//perform a sanity check. You might also query to find the max page number and see that it's not higher than that.

Vous insérez ensuite le pagenum dans votre requête SQL comme un décalage, après l'avoir multiplié par le nombre de résultats par page moins les résultats par page.

Dans presque tous les cas, il faut utiliser une déclaration préparée pour mettre les paramètres fournis dans le SQL, bien sûr, mais dans ce cas, ce n'est pas strictement nécessaire. puisque vous êtes sûr que la variable est un int en raison du casting (la partie (int)). Je devais juste le souligner.

Disons que vous avez 4 articles par page. Vous pouvez soit utiliser deux arguments pour LIMIT, soit LIMIT et OFFSET séparément. Si vous utilisez seulement LIMIT, le premier nombre est le décalage, le second est le nombre de résultats.

$offset=$pagenum*4-4;//this means for page 1, start on 0, page 2 starts on 4, etc.
$sql="select * from the_table limit $offset,4";

C'est ainsi que vous obtenez les données pour un numéro de page donné. Ensuite, l'impression des numéros de page est une autre histoire. Cet exemple est basé sur la façon dont vous voulez que les pages se présentent, comme décrit ci-dessus.

for($i=pagenum+1;$i<20;$i++){
  if($i<$pagenum+4){  ?>
  <a href='stuff.php?page=<?php echo $i;?>'><?php echo $i;?></a>
  <?php } elseif($i==$pagenum+4) { ?>
  ... <?php } elseif($i==20){ ?>
  <a href='stuff.php?page=20'>20</a>
  <?php } ?>

0voto

Travis Points 2502

Je vous recommande d'utiliser une bibliothèque normalisée. Ignacio a recommandé la bibliothèque PEAR::Pager, mais j'ai un faible pour Zend_Paginator dans le Zend Framework.

Il y a une grande variété d'adaptateurs inclus dans la bibliothèque, et sur Github par d'autres pour utiliser différentes sources de données.

0voto

Perpetualcoder Points 7381

Ce sera plus efficace si vous gérez cela dans la base de données et dans le code d'accès aux données, vous pouvez avoir une fonction qui prend des arguments comme pageSize, PageNumber, sortOrder. Votre sql pourrait ressembler à quelque chose comme

SELECT * FROM your_table WHERE condition = true ORDER BY some_field LIMIT 100, 10

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X