Page 1 sur 1

[Résolut]Système de pagination

Posté : 16 déc. 2010, 17:00
par Fre3z69
Bonjours à tous

j'ai actuelement grâce à un tutorial créer un système de pagination

le hic c'est qu'il est simple, et si on a 200 pages il va tout afficher de 1 à 200 ce qui fait un longue liste gênante et inutile de sur croix.

Je souhaiterais savoir si il est possible que vous m'aidiez à améliorer mon script afin d'obtenir un style de pagination un peu comme celui utiliser sur ce site, c'est a dire, limiter le nombre de 'lien" à afficher avant et après la page courante, et afficher les 3 dernières page si on est avant les "x+1" des dernières (x étant le nombre limite de liens affichés) et les 3 premières pages si on est à "x+1" des premières

exemples:
on est à la 15eme page et il y a en tous 27 pages, on souhaite afficher 3 liens de chaque côtés de la page courante (cela a partir de la 7eme page), on aurais
1/2/3/...12/13/14/15/16/17/18/...25/26/27.

Si on est à la 3eme page
1/2/3...25/26/27.

Si on est à la 6eme page.
1/2/3/4/5/6...25/26/27.

Et si on est à la dernière page (cela a partir de la 7eme page avant la fin)
1/2/3/...27.

Et si on est à la 22eme page
1/2/3/...22/23/24/25/26/27.

Voici mon script, je pense qu'il est vraiment à minimum, mais je connais pas encore toutes les fonction pour faire cela.
De plus je souhaite apprendre un peu plus mais j'ai pas trouver de tutoriel pour me dire comment créer cela.
Je veux bien copier coller un script, mais dans la première condition de pouvoir comprendre ce qui est fait et comment ça fonctionne.

C'est pourquoi je sollicite votre aide

voici le script
		$count = "SELECT COUNT(Id) as NbPosts FROM Annonces";
		$sqlcount = mysql_query($count) or die(mysql_error());
		$datecount = mysql_fetch_assoc($sqlcount);
		$NbPosts = $datecount['NbPosts'];
		$PerPage = 4;
		$NbPage = ceil($NbPosts/$PerPage);
		if (isset($_GET['p']) && $_GET['p']>0 && $_GET['p']<=$NbPage)
		{
			$CuPage = $_GET['p'];
		}
		else
		{
			$CuPage = 1;
		}
		
			echo '<h2>Gérer toutes les annonces</h2>';
			for ($i=1;$i<=$NbPage;$i++)
			{
				if ($i==$CuPage)
				{
					echo ' <a style="text-decoration:none;color:#0000ff;">'.$i.'</a> / ';
				}
				else
				{
					echo ' <a style="text-decoration:none;color:#ff0000;" href="index.php?g=voirannonces&p='.$i.'">'.$i.'</a> / ';
				}
			}
?>
			<table style="background:#000000;width:800px;">
<?php
		$post = mysql_query("SELECT * FROM Annonces ORDER BY Date DESC LIMIT ".(($CuPage-1)*$PerPage).",$PerPage");
			while ($voir = mysql_fetch_assoc($post))
			{
                                  .... On affiche comme d'habitudes les informations demandés....
                        }
Il y a d'autre choses avant le while, mais je l'ai enlever pour éclaircir le script.

Merci de votre aide, et de prendre de votre temps pour y répondre.

Cordialement

Re: Système de pagination

Posté : 16 déc. 2010, 17:37
par Mazarini
select case true
case $NbPage < 14
on affiche de 1 à $nbpage (13 pages max)
case $CUPage < 8
on affiche de 1 à ($CUPage + 3)
Si $NbPage > 13 on affiche "..."
on affiche de max($CUPage + 4,$NbPage-2) à $NbPage
othercase
on affiche de 1 à 3
on affiche "..."
on affiche de $cupage -3 à min($cupage+3,$nbpage)
si $cupage+3 < $nbpage -3 on affiche "..."
on affiche de de max($CUPage + 4,$NbPage-2) à $NbPage

Voila pour le principe, j'ai pu faire des erreurs sur le nombres, mais les tests te permettront de corriger

Re: Système de pagination

Posté : 16 déc. 2010, 20:49
par Fre3z69
Je vais essayer ceci

Mais je le met où, à la place du for ou dedans? ou où?

Merci de votre aide

cordialement

Re: Système de pagination

Posté : 17 déc. 2010, 06:19
par Fre3z69
J'ai trouver un code qui permet de me donner le genre que ce forum utilise ici
et des templates pour ça ici

J'analyserais cela un peu plus tard à 5h15 du matin c'est chaud de réfléchir ^^

Sinon j'ai pas compris ce que tu ma donner Mazarini, je c'est pas à quoi correspond case ni comment le mettre en place.

Pour moi et d'autres intéressés pourrais tu m'expliquer cela en me montrant un exemple STP?

Merci de votre aide et de répondre à nos questions

Cordialement

Re: Système de pagination

Posté : 17 déc. 2010, 10:55
par Mazarini
Bonjour,

J'ai essayé de faire un algo pour l'affichage en mélangeant du francais et du php. Le select case permet de distinguer les grands cas facilement identifiable.

Après réflexion, une solution plus simple :

Function NumeroPage($CuPage,£NbPAge)
{
Tu initialises un tableau
$j = 0
For ($i=1;$i <= Min(3,£NbPage);$i++) // page 1,2,3 sans dépasser $NbPage
{
$j++;
$t[$j] = i;
}
For ($i = Max(4,$CuPage-3);£i<Min($CuPage+3,$nbPage);£i++)£ ) // les pages autour de la page courante sauf 1,2,3 déjà prise et en ne dépassant pas $nbPage
{
$j++;
$t[$j] = $i;
}
For ($i = Max($CuPage+4,£NbPage-2;$i<=$nbpage;$i++) // Ajouter les 3 dernières pages si pas déjà présente
{
$j++;
$t[$j] = $i;
}

For ($i=1;$i<$j;$i++) // on affiche
{
if ($t[$i] == $CuPage) echo £Cupage else echo '<a href="??????">',$t[$i],'</a>'; // on affiche le lien sauf pour la page courante
if ($i<$j) if ($t[$i]+1<($t[$i+1]) echo "..."; // ce n'est pas la dernière et il y a un trou dans les numéros de page on met un séparateur
}
}

Pour le test :
For ($nbpage = 1;$nbpage < 15;$NbPage++)
For ($CuPage = 1;$CuPage<=$NbPage;$CuPage++)
{
echo 'cas ', $CuPage,'/',$NbPage,' : ';
meneroPage($CuPage,$NbPage);
echo '<br>';
}

Re: Système de pagination

Posté : 18 déc. 2010, 01:36
par Fre3z69
merci à toi effectivement ainsi c'est plus compréhensible ^^

Je vais analyser cela, merci de ton aide

cordialement