Pagination pour mon forum
Résolu/Fermé
younesase
Messages postés
80
Date d'inscription
samedi 21 avril 2012
Statut
Membre
Dernière intervention
27 avril 2014
-
18 mai 2013 à 22:00
h4ckkids Messages postés 16 Date d'inscription dimanche 19 mai 2013 Statut Membre Dernière intervention 26 février 2014 - 19 mai 2013 à 18:03
h4ckkids Messages postés 16 Date d'inscription dimanche 19 mai 2013 Statut Membre Dernière intervention 26 février 2014 - 19 mai 2013 à 18:03
A voir également:
- Pagination pour mon forum
- Comment ralentir un compteur linky forum - Accueil - Objets connectés
- Forum iptv - Forum TV & Vidéo
- Numéro forum téléphonique gratuit - Forum Mail
- Iptv ✓ - Forum Box et Streaming vidéo
- Trouver des chat gratuit ✓ - Forum Mail
1 réponse
h4ckkids
Messages postés
16
Date d'inscription
dimanche 19 mai 2013
Statut
Membre
Dernière intervention
26 février 2014
19 mai 2013 à 18:03
19 mai 2013 à 18:03
Salut younesase, j'ai eu le même problème à une époque, et j'ai trouvé la solution alors je te donne le code, mais il te faudra l'adapter à ton code évidemment.
D'abord, la fonction a simplement copier coller.
Ensuite, tu devras adapter ceci.
Je réponds à toutes tes questions en cas de besoin ;)
(si tu veux voir un exemple, sur le site dans ma signature c'est ce code qui est utilisé.
D'abord, la fonction a simplement copier coller.
<?php function barre_navigation ($nb_total, $nb_affichage_par_page, $debut, $nb_liens_dans_la_barre) { $barre = ''; // on recherche l'URL courante munie de ses paramètre auxquels on ajoute le paramètre 'debut' qui jouera le role du premier élément de notre LIMIT if ($_SERVER['QUERY_STRING'] == "") { $query = $_SERVER['PHP_SELF'].'?debut='; } else { $tableau = explode ("debut=", $_SERVER['QUERY_STRING']); $nb_element = count ($tableau); if ($nb_element == 1) { $query = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'].'&debut='; } else { if ($tableau[0] == "") { $query = $_SERVER['PHP_SELF'].'?debut='; } else { $query = $_SERVER['PHP_SELF'].'?'.$tableau[0].'debut='; } } } // on calcul le numéro de la page active $page_active = floor(($debut/$nb_affichage_par_page)+1); // on calcul le nombre de pages total que va prendre notre affichage $nb_pages_total = ceil($nb_total/$nb_affichage_par_page); // on calcul le premier numero de la barre qui va s'afficher, ainsi que le dernier ($cpt_deb et $cpt_fin) // exemple : 2 3 4 5 6 7 8 9 10 11 << $cpt_deb = 2 et $cpt_fin = 11 if ($nb_liens_dans_la_barre%2==0) { $cpt_deb1 = $page_active - ($nb_liens_dans_la_barre/2)+1; $cpt_fin1 = $page_active + ($nb_liens_dans_la_barre/2); } else { $cpt_deb1 = $page_active - floor(($nb_liens_dans_la_barre/2)); $cpt_fin1 = $page_active + floor(($nb_liens_dans_la_barre/2)); } if ($cpt_deb1 <= 1) { $cpt_deb = 1; $cpt_fin = $nb_liens_dans_la_barre; } elseif ($cpt_deb1>1 && $cpt_fin1<$nb_pages_total) { $cpt_deb = $cpt_deb1; $cpt_fin = $cpt_fin1; } else { $cpt_deb = ($nb_pages_total-$nb_liens_dans_la_barre)+1; $cpt_fin = $nb_pages_total; } if ($nb_pages_total <= $nb_liens_dans_la_barre) { $cpt_deb=1; $cpt_fin=$nb_pages_total; } // si le premier numéro qui s'affiche est différent de 1, on affiche << qui sera un lien vers la premiere page if ($cpt_deb != 1) { $cible = $query.(0); $lien = '<A HREF="'.$cible.'"><<</A> '; } else { $lien=''; } $barre .= $lien; // on affiche tous les liens de notre barre, tout en vérifiant de ne pas mettre de lien pour la page active for ($cpt = $cpt_deb; $cpt <= $cpt_fin; $cpt++) { if ($cpt == $page_active) { if ($cpt == $nb_pages_total) { $barre .= $cpt; } else { $barre .= $cpt.' - '; } } else { if ($cpt == $cpt_fin) { $barre .= "<A HREF='".$query.(($cpt-1)*$nb_affichage_par_page); $barre .= "'>".$cpt."</A>"; } else { $barre .= "<A HREF='".$query.(($cpt-1)*$nb_affichage_par_page); $barre .= "'>".$cpt."</A> - "; } } } $fin = ($nb_total - ($nb_total % $nb_affichage_par_page)); if (($nb_total % $nb_affichage_par_page) == 0) { $fin = $fin - $nb_affichage_par_page; } // si $cpt_fin ne vaut pas la dernière page de la barre de navigation, on affiche un >> qui sera un lien vers la dernière page de navigation if ($cpt_fin != $nb_pages_total) { $cible = $query.$fin; $lien = ' <A HREF="'.$cible.'">>></A>'; } else { $lien=''; } $barre .= $lien; return $barre; } ?>
Ensuite, tu devras adapter ceci.
// on prépare une requête permettant de calculer le nombre total d'éléments qu'il faudra afficher sur nos différentes pages // Avec des if else if j'avais prévu toutes les requêtes sql en fonctions des $_GET pour compter le nombre de textes. $sql='SELECT COUNT(*) as nombre FROM histoires' ; // on exécute cette requête $resultat = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); // on récupère le nombre d'éléments à afficher $nb_total = mysql_fetch_array($resultat); // on teste si ce nombre de vaut pas 0 if (($nb_total = $nb_total[0]) == 0) { echo '<div class="aucune">Aucune histoire ne correspond à votre recherche.</div>'; } else { // sinon, on regarde si la variable $debut (le x de notre LIMIT) n'a pas déjà été déclarée, et dans ce cas, on l'initialise à 0 if (empty($_GET['debut']) || (!mb_ereg("^[0-9]+$", $_GET['debut'])) || $_GET['debut'] < 0){ $_GET['debut'] = 0;} //Si debut n'est pas un nombre ou qu'il est inférieur à 0, on va l'initié à 0. $nb_affichage_par_page = 15; // Préparation de la requête avec le LIMIT //On prépare la requête sql pour l'affichage des textes. if(isset($_GET['type']) && ($_GET['type']) != '' && isset($_GET['sujet']) && ($_GET['sujet']) != '' && isset($_GET['auteur']) && ($_GET['auteur']) != '') { $sql=' SELECT * FROM histoires WHERE sujet = \''.$_GET['sujet'].'\' AND type = \''.$_GET['type'].'\' AND pseudo_auteur = \''.$_GET['auteur'].'\' ORDER BY id_histoire DESC LIMIT '.$_GET['debut'].','.$nb_affichage_par_page; } else { $sql='SELECT * FROM histoires ORDER BY vue ASC LIMIT '.$_GET['debut'].','.$nb_affichage_par_page; } // on exécute la requête $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); // on va scanner tous les tuples un par un while ($donnees = mysql_fetch_array($req)) { ?> <div><hr color=grey size=1px></hr> <?php //Maintenant, on affiche les histoires que l'on veut. echo '<p class="histoire"> <a href="texte.php?texte='.htmlspecialchars($donnees['id_histoire']).'"><span style="font-size: 1.1em;">' . str_replace('\\\'','\'', htmlspecialchars($donnees['titre'])).'</span><br /><span class="titre">Thème:</span> '.htmlspecialchars($donnees['sujet']).'<br /><span class="titre">Résumé:</span> '.htmlspecialchars($donnees['resume']).'<br /><span class="titre">Publié par:</span> '.htmlspecialchars($donnees['pseudo_auteur']).' le '.htmlspecialchars($donnees['date_ecriture']).'<br /></a><br /></p>'; if(isset($_SESSION['page_supp'])) { echo'<a href="confirm_supp_text.php?id='.htmlspecialchars($donnees['id_histoire']).'">Supprimer ' . $donnees['titre'] . '</a><br /> <a href="modif_texte.php?id='.htmlspecialchars($donnees['id_histoire']).'">Modifier '.htmlspecialchars($donnees['titre']).'</a></p> ';} ?> </div> <?php } // on libère l'espace mémoire alloué pour cette requête mysql_free_result ($req); // on affiche enfin notre barre, en utilisant la fonction qui est déclarée au dessus. echo '<div class="barre">'.barre_navigation($nb_total, $nb_affichage_par_page, $_GET['debut'], 10).'</div>'; } // on libère l'espace mémoire alloué pour cette requête mysql_free_result ($resultat); // on ferme la connexion à la base de données. mysql_close (); ?> </body> </html>
Je réponds à toutes tes questions en cas de besoin ;)
(si tu veux voir un exemple, sur le site dans ma signature c'est ce code qui est utilisé.