Pagination [HTML - PHP]
ZooX
-
okuni Messages postés 1221 Date d'inscription Statut Membre Dernière intervention -
okuni Messages postés 1221 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai actuellement sur mon site le systeme de pagination suivant :
(c'est le meme code que sur un tuto du site du zero : http://www.siteduzero.com/tutoriel-3-14547-tp-un-livre-d-or.html ).
le système fonctionne bien mais il ne me convient plus car j'ai trop de pages ... :
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13]
et j'aimerai avoir quelque chose comme ça :
<<precedent ... [5] [6] [7] ... suivant>>
Merci de m'aider a trouvé une solution
J'ai actuellement sur mon site le systeme de pagination suivant :
// --------------- Etape 2 ----------------- // On écrit les liens vers chacune des pages // ----------------------------------------- // On met dans une variable le nombre de messages qu'on veut par page $nombreDeMessagesParPage = 20; // Essayez de changer ce nombre pour voir :o) // On récupère le nombre total de messages $retour = mysql_query('SELECT COUNT(*) AS nb_messages FROM livreor'); $donnees = mysql_fetch_array($retour); $totalDesMessages = $donnees['nb_messages']; // On calcule le nombre de pages à créer $nombreDePages = ceil($totalDesMessages / $nombreDeMessagesParPage); // Puis on fait une boucle pour écrire les liens vers chacune des pages echo 'Page : '; for ($i = 1 ; $i <= $nombreDePages ; $i++) { echo '<a href="livreor.php?page=' . $i . '">' . $i . '</a> '; } ?> </p> <?php // --------------- Etape 3 --------------- // Maintenant, on va afficher les messages // --------------------------------------- if (isset($_GET['page'])) { $page = $_GET['page']; // On récupère le numéro de la page indiqué dans l'adresse (livreor.php?page=4) } else // La variable n'existe pas, c'est la première fois qu'on charge la page { $page = 1; // On se met sur la page 1 (par défaut) } // On calcule le numéro du premier message qu'on prend pour le LIMIT de MySQL $premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage; $reponse = mysql_query('SELECT * FROM livreor ORDER BY id DESC LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage); while ($donnees = mysql_fetch_array($reponse)) { echo '<p><strong>' . $donnees['pseudo'] . '</strong> a écrit :<br />' . $donnees['message'] . '</p>'; }
(c'est le meme code que sur un tuto du site du zero : http://www.siteduzero.com/tutoriel-3-14547-tp-un-livre-d-or.html ).
le système fonctionne bien mais il ne me convient plus car j'ai trop de pages ... :
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13]
et j'aimerai avoir quelque chose comme ça :
<<precedent ... [5] [6] [7] ... suivant>>
Merci de m'aider a trouvé une solution
A voir également:
- Pagination [HTML - PHP]
- Pagination powerpoint - Guide
- Editeur html - Télécharger - HTML
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Le fichier de pagination est insuffisant pour terminer cette opération ✓ - Forum Logiciels
10 réponses
tu dois modifier ton for
$nombreDePages étant le nombre de page au total, tu n'as qu'a mettre une autre variable contenant le nombre de page que tu veux qu'il y ai affiché.
Ensuite, tu dois un peut bidouiller pour rajouter "page suivante" et "page précédente"
bonne chance :)
for ($i = 1 ; $i <= $nombreDePages ; $i++) { echo '<a href="livreor.php?page=' . $i . '">' . $i . '</a> '; }
$nombreDePages étant le nombre de page au total, tu n'as qu'a mettre une autre variable contenant le nombre de page que tu veux qu'il y ai affiché.
Ensuite, tu dois un peut bidouiller pour rajouter "page suivante" et "page précédente"
bonne chance :)
Salut okuni,
tu peut me donné un exemple de modification pour le for ?parce que je vois pas trop comment je dois faire ...
merci...
tu peut me donné un exemple de modification pour le for ?parce que je vois pas trop comment je dois faire ...
merci...
Ok, je vais te montrer un bout de mon code de pagination.
voilà.
je t'explique :
Je calcule le nombre de lien qu'il y aura avant et après la page actuel.
Je pense pas devoir expliquer chaque variable, elles sont assez clair.
avec ça, il reste plus que l'intérieur du for :)
//On calcule le nombre total d'entrée dans la table. $retour1 = mysql_query("SELECT COUNT(*) AS nbre_entree FROM $table"); $donnees1 = mysql_fetch_array($retour1) or die (mysql_error()); $total = $donnees1['nbre_entree']; //On récupère le GET du lien. if (!empty($_GET['lien'])) { $lien = intval($_GET['lien']); } else { $lien = 1; } //On calcule le nombre de page. $nombre_de_page = ceil($total / $nombre_entree_par_page); //préparation au début du for $nombre_lien_avant = $lien - $nombre_lien_max; if ($nombre_lien_avant <= 0) { $nombre_lien_avant = 1; } //préparation a la fin du for. $nombre_lien_apres = $lien + $nombre_lien_max; if ($nombre_lien_apres >= $nombre_de_page) { $nombre_lien_apres = $nombre_de_page; } for ($i = $nombre_lien_avant; $i <= $nombre_lien_apres; $i++)
voilà.
je t'explique :
Je calcule le nombre de lien qu'il y aura avant et après la page actuel.
Je pense pas devoir expliquer chaque variable, elles sont assez clair.
avec ça, il reste plus que l'intérieur du for :)
J'ai fait ça grace a ton code :
Mais le problemme maintenant , c'est que ça affiche uniquement les 4 premières pages...
ce que je voudrai c'est que la numérotation des pages s'adapte en fonction de la page que l'on regarde (par exemple si on regarde la page 5 :
< [4] [5] [6] > )
<?php $nombre_entree_par_page = 40; $nombre_lien_max = 3; //On calcule le nombre total d'entrée dans la table. $retour1 = mysql_query("SELECT COUNT(*) AS nbre_entree FROM films"); $donnees1 = mysql_fetch_array($retour1) or die (mysql_error()); $total = $donnees1['nbre_entree']; //On récupère le GET du lien. if (!empty($_GET['id'])) { $lien = intval($_GET['id']); } else { $lien = 1; } //On calcule le nombre de page. $nombre_de_page = ceil($total / $nombre_entree_par_page); //préparation au début du for $nombre_lien_avant = $lien - $nombre_lien_max; if ($nombre_lien_avant <= 0) { $nombre_lien_avant = 1; } //préparation a la fin du for. $nombre_lien_apres = $lien + $nombre_lien_max; if ($nombre_lien_apres >= $nombre_de_page) { $nombre_lien_apres = $nombre_de_page; } for ($i = $nombre_lien_avant; $i <= $nombre_lien_apres; $i++) { echo ' <a href="films.php?page=' . $i . '"class="type2"><b><font size="3">[' . $i . ']</font></b></a> '; } ?>
Mais le problemme maintenant , c'est que ça affiche uniquement les 4 premières pages...
ce que je voudrai c'est que la numérotation des pages s'adapte en fonction de la page que l'on regarde (par exemple si on regarde la page 5 :
< [4] [5] [6] > )
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
bon c'est assez dur de rentrer dans ce code.
je te passe mon script entier, a toi de l'adapter.
Je te conseille vivement de lire attentivement tout le code. Si tu as une question, n'hésite pas.
ps : je crois que dans le for, il y a une partie (if) qui est inutile mais bon, tu verra par toi même.
je te passe mon script entier, a toi de l'adapter.
Je te conseille vivement de lire attentivement tout le code. Si tu as une question, n'hésite pas.
ps : je crois que dans le for, il y a une partie (if) qui est inutile mais bon, tu verra par toi même.
<?php //Pagnination made by Okuni. /*LIMIT. LIMIT $premier_message, $nombre_entree_par_page */ function pagination($page,$table,$nombre_entree_par_page,$nombre_lien_max) { //On calcule le nombre total d'entrée dans la table. $retour1 = mysql_query("SELECT COUNT(*) AS nbre_entree FROM $table"); $donnees1 = mysql_fetch_array($retour1) or die (mysql_error()); $total = $donnees1['nbre_entree']; //On récupère le GET du lien. if (!empty($_GET['lien'])) { $lien = intval($_GET['lien']); } else { $lien = 1; } //On calcule le nombre de page. $nombre_de_page = ceil($total / $nombre_entree_par_page); //préparation au début du for $nombre_lien_avant = $lien - $nombre_lien_max; if ($nombre_lien_avant <= 0) { $nombre_lien_avant = 1; } //préparation a la fin du for. $nombre_lien_apres = $lien + $nombre_lien_max; if ($nombre_lien_apres >= $nombre_de_page) { $nombre_lien_apres = $nombre_de_page; } //Si le nombre de page != 1 on affiche pas le cadre de pagination if ($nombre_de_page != 1) { //On écrit une boucle pour écrire les liens vers les différentes pages. echo '<div class="pagination">Page :<br/>'; for ($i = $nombre_lien_avant; $i <= $nombre_lien_apres; $i++) { //si on commence le for, on vois si on est sur la première page ou pas. if ($i == $nombre_lien_avant) { if ($_GET['lien'] == 1 or $lien == 1) { echo '>> '; echo '<a class="pageActive"><strong><u>'.$i.'</u></strong></a> '; } else { $i_precedent = $_GET['lien'] - 1; echo '<a href="'.$_GET['section'].'-'.$page.'-'.$i_precedent.'.html">Page précédente</a> '; echo '<a href="'.$_GET['section'].'-'.$page.'-'.$i.'.html">'.$i.'</a> '; } } //on souligne le numéro de la page sélectionnée. else if ($i == $_GET['lien']) { if ($i == $nombre_de_page) { //echo 'dernier lien : '.$i; if ($_GET['lien'] == $nombre_de_page) { echo '<a class="pageActive"><strong><u>'.$i.'</u></strong></a> '; echo '<<'; } else { $i_suivant = $_GET['lien'] + 1; echo '<a href="'.$_GET['section'].'-'.$page.'-'.$i.'.html">'.$i.'</a> '; echo '<a href="'.$_GET['section'].'-'.$page.'-'.$i_suivant.'.html">Page suivante</a> '; } } else { echo '<a class="pageActive"><strong><u>'.$i.'</u></strong></a> '; } } //si on termine le for, on vois si on a sélectionné le dernier lien ou pas. else if ($i == $nombre_lien_apres) { //echo 'dernier lien : '.$i; if ($_GET['lien'] == $nombre_lien_apres) { echo '<<'; } else if (empty($_GET['lien']) and $lien == 1) { $i_suivant = 2; echo '<a href="'.$_GET['section'].'-'.$page.'-'.$i.'.html">'.$i.'</a> '; echo '<a href="'.$_GET['section'].'-'.$page.'-'.$i_suivant.'.html">Page suivante</a> '; } else { $i_suivant = $_GET['lien'] + 1; echo '<a href="'.$_GET['section'].'-'.$page.'-'.$i.'.html">'.$i.'</a> '; echo '<a href="'.$_GET['section'].'-'.$page.'-'.$i_suivant.'.html">Page suivante</a> '; } } //sinon on affiche le lien correspondant a $i. else { echo '<a href="'.$_GET['section'].'-'.$page.'-'.$i.'.html">'.$i.'</a> '; } } echo '</div>'; } $premier_message = ($lien - 1) * $nombre_entree_par_page; return $premier_message; } ?>
Salut,
je travaille sur ton code ... il est vachement long :p
mais en fait j'ai pas besoin de changer beaucoup de chose a ton code pour l'adapté a mon site . non ?
deja dans les premières lignes y'a :
es-ce que je suis sensé changé $table et le remplacer par le nom de ma table ???
.
je travaille sur ton code ... il est vachement long :p
mais en fait j'ai pas besoin de changer beaucoup de chose a ton code pour l'adapté a mon site . non ?
deja dans les premières lignes y'a :
pagination($page,$table,$nombre_entree_par_page,$nombre_lien_max)
es-ce que je suis sensé changé $table et le remplacer par le nom de ma table ???
.
J'ai un problemme au niveau de cette ligne : (parse error, expecting `'&'' or `T_VARIABLE')
j'ai remplacé les $page,$table,$nombre_entree_par_page,$nombre_lien_max comme ça :
(la page ou se trouve ton script s'appelle : images.php la table s'appelle images , je voudrais 40 entrés par pages et 3 liens )
Merci de bien vouloir m'aider :)
pagination($page,$table,$nombre_entree_par_page,$nombre_lien_max)
j'ai remplacé les $page,$table,$nombre_entree_par_page,$nombre_lien_max comme ça :
function pagination($images,$images,$40,$3)
(la page ou se trouve ton script s'appelle : images.php la table s'appelle images , je voudrais 40 entrés par pages et 3 liens )
Merci de bien vouloir m'aider :)
heu, une variables commencant par un chiffres n'existe pas. tu es obligé de faire commencer par une lettre. libre à toi d'après rajouter des chiffres.
exemple :
$15var : variables mauvaise.
$var15 : variable correcte.
exemple :
$15var : variables mauvaise.
$var15 : variable correcte.