FONCTION DE PAGINATION SIMPLE

cs_NainPuissant Messages postés 12 Date d'inscription mardi 4 octobre 2005 Statut Membre Dernière intervention 26 septembre 2007 - 30 nov. 2006 à 12:10
jdeheyn Messages postés 23 Date d'inscription vendredi 14 avril 2006 Statut Membre Dernière intervention 14 janvier 2010 - 1 nov. 2010 à 00:13
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/40509-fonction-de-pagination-simple

jdeheyn Messages postés 23 Date d'inscription vendredi 14 avril 2006 Statut Membre Dernière intervention 14 janvier 2010
1 nov. 2010 à 00:13
J'aurai tendance à dire qu'il y a un problème dans le cas où le paramètre '$url_rewriting' de cette fonction est à 'true' : dans ce cas là la valeur '$current_page' n'est pas récupérée.

Je propose donc de changer la ligne 12 :

$current_page = !empty($_GET[$var_page]) && is_numeric($_GET[$var_page]) && $_GET[$var_page] < $nb_pages + 1 ? $_GET[$var_page] : 1;


par le code suivant :

if ($url_rewriting)
{
$url_detaillee = explode("/", $_SERVER["REQUEST_URI"]);
$current_page = !empty($url_detaillee[count($url_detaillee)-1]) && is_numeric($url_detaillee[count($url_detaillee)-1]) && $url_detaillee[count($url_detaillee)-1] < $nb_pages + 1 ? $url_detaillee[count($url_detaillee)-1] : 1;
}
else $current_page = !empty($_GET[$var_page]) && is_numeric($_GET[$var_page]) && $_GET[$var_page] < $nb_pages + 1 ? $_GET[$var_page] : 1;

Quelque soit l'option '$url_rewriting', on obtient toujours '$current_page'. Et l'affichage de la pagination se fait correctement (page en cours en gras).
montalling Messages postés 1 Date d'inscription jeudi 18 octobre 2007 Statut Membre Dernière intervention 24 décembre 2009
24 déc. 2009 à 23:14
bonsoir
je suis débutant en php et html ...merci pour le poste
je voudrez savoir ou je place ce code php et comment l'intégrer dans ma page web et est ce que je met le code dans tout mes autre pages ?
merci
niz91 Messages postés 2 Date d'inscription lundi 21 juillet 2008 Statut Membre Dernière intervention 24 février 2009
4 avril 2009 à 01:13
Bonjour, dabord merci pour ce script.
voila, j'ai un probleme. j'affiche des articles contenus dans ma BDD.
ces articles sont 3, le probleme c'est qu'a chaque page il m'affiche mes 3 articles et moi je voudrais qu'il n'y en ai qu'un par page.
j'utilise un mysql fetch array dans la boucle for ($i = 1; $i <= 10000; $i++) mais je ne sait pas comment l'adapter

Merci de m'eclairer
mrjulien Messages postés 38 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 28 novembre 2007
15 déc. 2006 à 17:11
"notre cher Windaube". Encore un commentaire constructif inutile.. surtout que tu as développé du code pour win32 et que tu dois tourner dessus certainement.
cs_jean84 Messages postés 449 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 5 mars 2009
15 déc. 2006 à 17:07
Malalam > forcement... lol
Maintenant je capte ^^
Merci ;-)
cs_NainPuissant Messages postés 12 Date d'inscription mardi 4 octobre 2005 Statut Membre Dernière intervention 26 septembre 2007
13 déc. 2006 à 11:29
Wouhou j'ai des commentaireuhs >.< (merci d'ailleurs :p).

Je voulais savoir si je transformais cette fonction en class cela intéresserai ?

Et puis si vous avez des remarques a faire je les prends volontiers ! =o

@++
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
12 déc. 2006 à 13:10
Jean84 => ça sert à paginer... ;-)
Imagine un catalogue : tu as 100 références. TU veux afficher ton catalogue, mais pas les 100 références sur la même page, ça ferait beaucoup.
Mettons que tu en veuilles 20 par pages, et donc, tu auras 5 pages.
La pagination, c'est ça : limiter un jeu de résultat pour un affichage sur plusieurs pages.
cs_jean84 Messages postés 449 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 5 mars 2009
12 déc. 2006 à 13:04
Question un peu stupide (venant de ma part sa ne surprendra personne ^^) : heu, c'est quoi une fonction de pagination ?
Parce que j'imagine que ce n'est pas la meme chose qu'un fichier swap ou le bon vieux pagefile.sys de notre cher Windaube ?
Et en quoi l'url_rewriting est utile la dedans ?

Petit commentaire sur le code : j'ai pas tout regarder mais pour un premier code, c'est bien presenter (fonction bien documentee) et optimisation du code utilise a bon escient. Bravo ne serait-ce que pour sa, on voit que tu as fait un effort (c'est pas touours le cas malheureusement....)

@++
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
7 déc. 2006 à 16:20
Encore une fois, ce que tu dis n'est valable QUE pour mysql (enfin, pas QUE...mais bcp de bases de données n'ont pas de clause LIMIT).
Et mysql n'est pas la seule base de données au monde, loin s'en faut...
De plus, ce n'est pas vrai si on l'utilise conjointement avec un ORDER BY sur un champ non indexé, par exemple. Il faut bien comprendre comment marche généralement LIMIT...dans bien des cas, mysql est obligé de sélectionner toute la table comme si LIMIT n'y était pas, de trier comme demandé (si demandé...), puis de virer tout ce qui est en dehors du LIMIT.
FlUxIuS Messages postés 4 Date d'inscription mercredi 28 décembre 2005 Statut Membre Dernière intervention 7 décembre 2006
7 déc. 2006 à 15:49
:) Orf ouep mais l'idée et d'utiliser les requetes de façons judicieuses quand on travail avec une base de donnée.

Il faut aussi savoir que avec LIMIT par exemple, la requete ne renvera que 30 resultats à partir de la ligne 0 (exemple) ce qui alégera beaucoup le tout.

:)
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
6 déc. 2006 à 18:09
Hello,

certes...quand on bosse avec mysql.
Et avec mssql ? postgre? ou autre ? OU sans base de données, avec un tableau comme l'exemple ici ? Ou sur un fichier ? etc etc...
L'avantage de cette technique est qu'elle est à peu près générique.

Ceci dit, côté rapidité, LIMIT n'est pas un foudre de guerre, comme clause...
FlUxIuS Messages postés 4 Date d'inscription mercredi 28 décembre 2005 Statut Membre Dernière intervention 7 décembre 2006
6 déc. 2006 à 17:37
Ce genre de pagination est une technique :) mais le problème c'est que l'on perd un peu de temps à l'interprétation du code puis au calcul de la requête enfin pour dire que personelement le meilleur mode d'affichage c'est d'utiliser LIMIT 54 , 30

:) ou 54 est la ligne et 30 l'affichage de resultat enfin c'est ce que je ferais pour de la pagination car réelement c'est plus court à écrire et c'est plus optimisé ;)
mrjulien Messages postés 38 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 28 novembre 2007
30 nov. 2006 à 17:29
Pas de soucis l'amis :)
cs_NainPuissant Messages postés 12 Date d'inscription mardi 4 octobre 2005 Statut Membre Dernière intervention 26 septembre 2007
30 nov. 2006 à 17:21
C'est pas qu'une classe me branche pas... mais j'veux vraiment qu'elle reste simple (et pis je sais pas vraiment c'est quoi l'héritage en fait >.<), je regarderais pour réglé le problème que tu m'as dis, merci pour les conseils :)
mrjulien Messages postés 38 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 28 novembre 2007
30 nov. 2006 à 17:10
Il est plus convivial je pense de faire ça avec une classe, qui permettrai donc d'utiliser SQL en brut. De même tu pourrai ensuite la réutiliser avec de l'héritage par exemple. M'enfin le code reste sympa :=)
cs_NainPuissant Messages postés 12 Date d'inscription mardi 4 octobre 2005 Statut Membre Dernière intervention 26 septembre 2007
30 nov. 2006 à 17:07
Bon bah oké =x une suggestion pour réglé le problème ? =o
mrjulien Messages postés 38 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 28 novembre 2007
30 nov. 2006 à 17:04
Nan :)
cs_NainPuissant Messages postés 12 Date d'inscription mardi 4 octobre 2005 Statut Membre Dernière intervention 26 septembre 2007
30 nov. 2006 à 16:54
Bah heu... XD

Quand on fait un LIMIT de l'enregistrement $pagination['start_page'] (1 on va dire) jusqu'à l'enregistrement $pagination['data_per_page'] (du genre 30) donc avec la requête SELECT blabla FROM ici LIMIT 1, 30 on retourne les résultat de 1 jusqu'à 30 donc j'vois pas en quoi cela parcours tout les résultats... par contre dans mon exemple avec le array oui ok la ça parcours bien tout les résultats car j'utilise la fonction array_slice mais j'ai mis ça a titre d'exemple >.<

Enfin... j'espere que j'dis pas trop de conneries la =x
mrjulien Messages postés 38 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 28 novembre 2007
30 nov. 2006 à 16:43
Oui. Le problème que je voulai que te faire remarquer vient du fait que ta fonction parcours tous les résultats alors qu'ils ne sont pas tous utilisés.
cs_NainPuissant Messages postés 12 Date d'inscription mardi 4 octobre 2005 Statut Membre Dernière intervention 26 septembre 2007
30 nov. 2006 à 14:15
Salut,

Pour le LIMIT de SQL, il suffit de faire ceci :

$query = 'SELECT id, content FROM news LIMIT ' . $pagination['start_page'] . ', ' . $pagination['data_per_page'];

Enfin comme avec le array_slice non ?
mrjulien Messages postés 38 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 28 novembre 2007
30 nov. 2006 à 14:00
Au final non :)
En relissant, je me rend compte que le traitement va par exemple éxécuter X fois la fonction (pour la bonne pagination) et selectionner admétons 10.000 enregistrement pour n'en utiliser que 10. Le fait qu'il manque le LIMIT de SQL est responsable de cela. Pour un site à fort traffic, si par exemple x personnes demandent en même temps l'accés à la base, le serveur montera en charge.
mrjulien Messages postés 38 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 28 novembre 2007
30 nov. 2006 à 13:43
Salut.
Le code est compact et puissant. Perso j'accroche.
Bravo.
cs_NainPuissant Messages postés 12 Date d'inscription mardi 4 octobre 2005 Statut Membre Dernière intervention 26 septembre 2007
30 nov. 2006 à 12:10
hey psssst... j'voudrais bien un ou deux (ou pleins d'autres XD) commentaire(s) au minimum pour savoir si la fonction est bien/pas bien, pour pouvoir me corriger et tout et tout...
Rejoignez-nous