Pagination [HTML - PHP]
ZooX
-
okuni Messages postés 1325 Statut Membre -
okuni Messages postés 1325 Statut Membre -
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
Configuration: Windows Vista Firefox 3.5.2
10 réponses
-
tu dois modifier ton for
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... -
Ok, je vais te montrer un bout de mon code de pagination.
//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 :
<?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.
<?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 :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')
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. -
Merci okuni pour ton script , j'ai pas encore réussit a l'intégré dans mon site mais sa viendra
merci encore
++ -
Pas de problème.
normalement, tu n'as rien a faire à part remplir les 4 variables de la fonction pagination et de modifier s'il faut la requête sql au début du script.
Biens sur il y au aussi le CSS.