Pagination News
Résolu
TRUNCKS
Messages postés
1019
Date d'inscription
Statut
Membre
Dernière intervention
-
avion-f16 Messages postés 19252 Date d'inscription Statut Contributeur Dernière intervention -
avion-f16 Messages postés 19252 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour à vous,
J'ai suivi un petit tuto du zéro pour faire un système de news, mais maintenant j'aimerai faire une petite pagination pour afficher par exemple 5 news seulement, mais je ne sais du tout par où commencer.
Ma table à quatre champs: id, titre, contenu, timestamp.
J'ai suivi un petit tuto du zéro pour faire un système de news, mais maintenant j'aimerai faire une petite pagination pour afficher par exemple 5 news seulement, mais je ne sais du tout par où commencer.
Ma table à quatre champs: id, titre, contenu, timestamp.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" > <head> <title>Bienvenue sur mon site</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <style type="text/css"> h1, h3 { text-align:center; } h3 { background-color:black; color:white; font-size:0.9em; margin-bottom:0px; } .news p { background-color:#CCCCCC; margin-top:0px; } .news { width:70%; margin:auto; } </style> </head> <body> <h1>Bienvenue sur mon site !</h1> <p>Voici les dernières news :</p> <?php mysql_connect("localhost", "root", ""); mysql_select_db("news"); // On récupère les cinq dernières news. $retour = mysql_query('SELECT * FROM news ORDER BY id DESC LIMIT 0, 5'); while ($donnees = mysql_fetch_array($retour)) { ?> <div class="news"> <h3> <?php echo $donnees['titre']; ?> <em>le <?php echo date('d/m/Y à H\hi', $donnees['timestamp']); ?></em> </h3> <p> <?php // On enlève les éventuels antislashs, PUIS on crée les entrées en HTML (<br />). $contenu = nl2br(stripslashes($donnees['contenu'])); echo $contenu; ?> </p> </div> <?php } // Fin de la boucle des news. ?> </body> </html>
1 réponse
Salut.
Il va falloir compter le nombre d'entrées dans la table et diviser le total par le nombre de news par page.
Le nombre obtenu correspondra au nombre de page.
Pour éviter d'avoir des nombres décimaux, tu peux utiliser la fonction ceil() qui arrondi à l'entier supérieur.
Une fois que tu as le nombre de page, tu peux, à l'aide d'une boucle, créer chaque lien vers chaque page.
Dans le lien, il faut indiquer la page grâce aux paramètres dans l'URL (GET).
Exemple : /news.php?page=3 pour la page 3.
Dans le code qui récupère les news, il faut indiquer le premier élément à prendre.
Ce premier élément est : (page_actuelle - 1) * nb_news_par_page
Dans le cas où $_GET['page'] n'existe pas, la page sera la n°1.
Et il faut également indiquer le nombre d'entrées à prendre depuis cet élément.
Pour cette étape, il faut utiliser la clause LIMIT.
En code, ça donne :
Il va falloir compter le nombre d'entrées dans la table et diviser le total par le nombre de news par page.
Le nombre obtenu correspondra au nombre de page.
Pour éviter d'avoir des nombres décimaux, tu peux utiliser la fonction ceil() qui arrondi à l'entier supérieur.
Une fois que tu as le nombre de page, tu peux, à l'aide d'une boucle, créer chaque lien vers chaque page.
Dans le lien, il faut indiquer la page grâce aux paramètres dans l'URL (GET).
Exemple : /news.php?page=3 pour la page 3.
Dans le code qui récupère les news, il faut indiquer le premier élément à prendre.
Ce premier élément est : (page_actuelle - 1) * nb_news_par_page
Dans le cas où $_GET['page'] n'existe pas, la page sera la n°1.
Et il faut également indiquer le nombre d'entrées à prendre depuis cet élément.
Pour cette étape, il faut utiliser la clause LIMIT.
En code, ça donne :
<?php define('NEWS_PAR_PAGE', 5); include 'connexion-pdo.php'; // 1) *** Afficher les news *** // Numéro de la page $page = isset($_GET['page']) ? (int) $_GET['page'] : 1; if($page < 1) $page = 1; // Premier élément $premier = ($page - 1) * NEWS_PAR_PAGE; // Requête SQL $sql = 'SELECT * FROM news ORDER BY id DESC LIMIT '.$premier.','.NEWS_PAR_PAGE; $result = $bdd->query($sql); // Affichage des news while($news = $result->fetch()) { include 'tpl/news-single.tpl.php'; // À remplacer par ce que tu veux } // 2) *** Pagination *** // Nombre de page $sql = 'SELECT COUNT(*) AS nb FROM news'; $result = $bdd->query($sql); $firstRow = $result->fetch(); $nbNews = $firstRow['nb']; $nbPage = ceil( $nbNews / NEWS_PAR_PAGE ); // Affichage des liens for($i = 1 ; $i <= $nbPage ; $i++) { echo '<a href="news.php?page='.$i.'">'.$i.'</a> '; } ?>J'ai codé ça directement dans le formulaire de réponse, il y a sans doute des erreurs.