Hello
Pour faire ça, tu as besoin de 2 variables de plus.
Comme tu ne donnes pas de code, je t'explique le principe.
1) tu dois compter le nb total de news
Pour compter : $query = "SELECT COUNT(id) FROM news";
Ca te donne par exemple $total = 17;
2) tu dois savoir combien de news par page tu veux afficher.
Par exemple $nb_news_par_page = 3;
3) tu peux maintenant calculer le nb de pages :
Code :
- $nb_pages = ceil($total / $nb_news_par_page); // donnera l'arrondi de 17/3=6
|
4) Maintenant il ne te reste plus qu'à afficher les news ainsi que les numéros de page :
Code :
- // on determine la page en cours. Page 1 par defaut.
- $page = (isset($_GET['p'])) ? abs(intval($_GET['p'])) : 1;
- $page = ($page == 0) ? 1 : $page; // antibug si page à zéro
- // on détermine les news affichées sur cette page
- $premiereNews = ($page -1) * $nb_news_par_page;
- $derniereNews = $nb_news_par_page;
- // la requête
- $query = sprintf("SELECT id, titre, auteur, dateheure FROM news ORDER BY dateheure DESC LIMIT %d,%d;", $premiereNews, $derniereNews);
- // je te laisse le soin de trier comme tu veux, et afficher ensuite
|
5) le système de pagination
Code :
- // on supposera ici que la page est ainsi dans l'URL : mon_fichier.php?p=30 par exemple
- if ($nb_pages > 1) // pour une page unique, ça ne sert pas des masses ^^
- {
- // afficher page précédente ?
- if ( $page > 1)
- echo '<a href="?p='.($page -1).">&raquo; Préc.</a> - ';
- // afficher tous les numéros de page
- for($a = 1; $a <= $nb_pages; $a++)
- {
- if ($a == $page) // permet de ne pas mettre de lien sur la page en cours
- echo ' ['.$a.'] - ';
- else
- echo '<a href="?p='.$a.'">'.$a.'</a> - ';
- }
- // afficher page suivante ?
- if ($page < $nb_pages)
- echo '<a href="?p='.($page +1).">Suiv. &raquo;</a> - ';
- }
|
Ce code pourrait être optimisé, si tu as peu de pages c'est intéressant, si tu as 6000 pages évidemment va falloir l'améliorer...
Pas testé mais ça doit marcher.
---------------
NewsletTux - outil de mailing list en PHP MySQL