Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/11/2006, 18h18   #1
Membre émérite
 
Avatar de ozzmax
 
Inscription : novembre 2005
Messages : 986
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : novembre 2005
Messages : 986
Points : 863
Points : 863
Envoyer un message via MSN à ozzmax
Par défaut Afficher beaucoup d'enregistrement dans une pagination

Bonjour à tous

J'explique ma situation
je fais une recherche dans une table de dossier la requete est dynamiquement construite en fonction du type de recherche et du mots clé...

Ca marche #1

Je fais afficher mes résultats par groupe de 20 (merci au tuto qui m'on permis de faire ca)
Dans le bas j'ai des liens sur page 1,2,3,4....

Le probleme est que si la recherche n'est pas spécifique et que ca me retourne par exemple 400 résultats....ca pagine...mais ca ne finis plus...ca se rends jusqu'a la page 20....

Alors ainsi de suite...600 résultat...30 pages... ca fait pas beau de voir les chiffre de 1 à 30 dans le bas

Ce que je voudrait faire c'est de limiter a 10 le nombres de pages à la fois....ainsi à la 4e page je verrais... << 4,5,6,7,8,9,10,11,12,13 >>

J'ai un probleme d'algorythme...est ce que vous pouvez m'aider ladessus

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
//$max_pg = le nombre de page maximum...en partant de 1 donc je fais -1 pour partir de 0
//$page = la page que je suis rendu actuellement dans l;'affichage
//$nb = le nombre de résultats pour l'affichage...20 pour mon cas
 
 
echo "<p><font size=\"-1\">Pages ".$page." sur ".($max_pg-1)."</font>&nbsp;";
echo ($page !=0 ) ? '<a href="?continu=1&search=dossier&page='.($page-1).'&nb='.$nb.'#res">&lt;&lt;</a>&nbsp;' : '<a> &lt;&lt;</a>&nbsp;'; 
for($i = 0 ; $i < $max_pg ; $i++) {
	if($i == $page){
		echo ' <a>'.$i.'</a>';
	}
	else{
		echo ' <a href="?continu=1&search=dossier&page='.$i.'&nb='.$nb.'#res">'.$i.'</a>';
	}
}
echo ($page != $max_pg-1 ) ? '&nbsp;&nbsp;&nbsp;<a href="?continu=1&search=dossier&page='.($page+1).'&nb='.$nb.'#res">&gt;&gt;</a>' : '&nbsp;&nbsp;&nbsp;<a>&gt;&gt;</a>';
Donc je me demandais où je devrais faire la validation...c'est surment pour la boucle et les variable de départ et de fin
mais faut que ce soit dynamique et non fix..c'est ce qui me cause probleme...je ne peux pas faire $page + 10 car il se peut qu'il n'y ait pas 10 page de résultats....ainsi est ce que je peux mettre une condition s'il y a plus de 10...fait afficher les 10 sinon affiche toute ?

merci pour vos suggestions
__________________
La perfection n'est pas un but, l'amélioration constante devrait l'être!
La position des Développeurs de developpez avec les explications
ozzmax est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2006, 20h03   #2
Membre émérite
 
Avatar de ozzmax
 
Inscription : novembre 2005
Messages : 986
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : novembre 2005
Messages : 986
Points : 863
Points : 863
Envoyer un message via MSN à ozzmax
Alors voici mon évolution

y a-t-il des moyens plus simple...
j'ai l'impression de trouver ici une solution qui contourne le probleme

Est-ce la bonne?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
$varDepart = 0;
$varFin = 0;
if($max_pg > 10){
	$varDepart = ($max_pg-10 >= $page) ? $page : $max_pg - 10;
	$varFin = ($max_pg >= $page+10) ? $page + 10 : $max_pg;
}
else{
	$varDepart = 0;
	$varFin = $max_pg;
}
 
....
//le reste est dans le premier post
commentaires?
__________________
La perfection n'est pas un but, l'amélioration constante devrait l'être!
La position des Développeurs de developpez avec les explications
ozzmax est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2006, 10h52   #3
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Citation:
Code :
1
2
3
4
if($max_pg > 10){
	$varDepart = ($max_pg-10 >= $page) ? $page : $max_pg - 10;
	$varFin = ($max_pg >= $page+10) ? $page + 10 : $max_pg;
}
Si je fais le calcul avec
Code :
1
2
$max_pg = 30;
$page = 25;
, je me retrouve avec
Code :
$varDepart = $varFin = 20;
Est-ce normal ? Je ne pense pas.

Je te propose ça :
Code :
1
2
3
4
 
$fenetre = 10;
$varDepart = max( $page - $fenetre / 2 , 0);
$varFin    = min( $page + $fenetre / 2 , $max_pg);
(Faudra rajouter un traitement pour avoir toujours 10 valeurs affichées, même quand $page est proche d'une extremité)


Sinon je te suggère de mettre un lien vers la première page et eventuelement vers la dernière.
Tu peux aussi avoir le mécanisme suivant :
Citation:
1 2 ... 12 13 14 15 16 ... 29 30
__________________
Get your motor runnin'
Head out on the highway...
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/11/2006, 16h16   #4
Membre émérite
 
Avatar de ozzmax
 
Inscription : novembre 2005
Messages : 986
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : novembre 2005
Messages : 986
Points : 863
Points : 863
Envoyer un message via MSN à ozzmax
ok j'ai essayé avec ta manière ca fonctionne également et ca semble moins complexe merci

Mais bon ton calcul est faux je crois si max_pg=30 et $page =25, a ce moment la variable de départ et celle de fin ne sont pas de la meme valeur

Citation:
$varDepart = ($max_pg-10 >= $page) ? $page : $max_pg - 10;
$varDepart = (30-10 >= 25)? $page : 30-10 = 20

Citation:
$varFin = ($max_pg >= $page+10) ? $page + 10 : $max_pg;
$varFin = (30 >= 25+10) ? $page+10 : 30 = 30

ainsi, $varDepart != $varFin

Mais bon pour cet affichage ca somble fonctionner sauf que la je me suis rendu compte que ya un probleme qui se situe au niveau de la requete que je fais et le nombre d'enregistrement qui est assez élevé

je test ma requete de recherche en phpMyAdmin et ca prend 3 à 6 sec de temps d'execution afin de me retourner mes valeurs...présentement il y a 15000 enregistrements sur une table...Je crois que je vais posté une nouvelle interrogation dans sgbd pour l'optimisation de requete

Merci pour ton aide sur la pagination par contre

bonne journée
__________________
La perfection n'est pas un but, l'amélioration constante devrait l'être!
La position des Développeurs de developpez avec les explications
ozzmax est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/11/2006, 23h24   #5
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
En effet mon calcul était faux
__________________
Get your motor runnin'
Head out on the highway...
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h07.


 
 
 
 
Partenaires

Hébergement Web