|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||||
|
Membre du Club
![]() Inscription : janvier 2010 Messages : 317 ![]() |
Bonjour les développeurs :-)
J'ai fais un code PHP pour associer les articles aux catégories et afficher les catégories qui n'ont rien. J'ai ajouter une limite page par page à chaque catégorie pour limiter le nombre d'article par affichage. Le problème est que ma pagination est dépendante de toutes les catégories. Et que si j'ai un article dans une catégorie mais que dans un autre, j'en ai plusieurs. La catégorie qui en a moins, il n y aura plus d'affichage. Mes deux TABLES: Code :
Code :
C'est le page par page qui est un problème. Si je n'avais qu'une seule catégorie a afficher, je n'aurais pas à poster mais je veux afficher toutes les catégories avec leur contenu. Si je change de page dans une catégorie, ça change partout. Et si j'ai rien dans une catégorie, ça va incrémenté de 1 quand même. Correct : 1 of 3 pas correct : 5 of 3 La pagination est au plus simple possible, juste avec un précédent et un suivant. Si quelqu'un a une idée pour ne pas que mes articles que ça incrémente pas quand je clique sur les autres "suivant". De l'aide serait apprécié.
__________________
|
||||
|
|
00
|
|
|
#2 |
|
Membre du Club
![]() Inscription : janvier 2010 Messages : 317 ![]() |
Bonjour.
Je veux préciser ici que j'affiche à partir d'un while une série de catégories avec leurs articles respectifs. Chaque catégorie a sa pagination. Le problème c'est que le pagination est basée sur une seule requête celle qui affiche toutes les catégories. Les paginations sont sur la même page comme illustrer dans l'image du message précédent. ça donne ces résultats inattendus : 4 de 10, si je clique sur suivant, ça va aller à 5 de 10. Mais par le fait même ça va aussi changé celui qui a 1 de 1 à 5 de 1 et ça va faire disparaitre le contenu de celui-ci. C'est un problème que je n'arrive pas à régler en cherchant sur le web. Je cherche à résoudre le problème avec le moins de code possible et en me basant sur ce que j'ai de fait jusqu'alors. Si quelqu'un connait le problème, ça serait apprécié et ça peut en aider plus d'un. Salutations, Dan.
__________________
|
|
|
00
|
|
|
#3 |
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 738 ![]() |
Lis ce topic : Probleme pagination sur script recherche
Il y a peu je donnais des explications sur le comment on crée une pagination. J'évoquais entre autre 2 manières de faire. Tu ne peux pas prendre ceci comme base pour créer cette pagination. Cette pagination ne concerne pas l'ensemble des catégories, mais d'1 catégorie, et uniquement une. Mais pas seulement, cette pagination concerne des articles, plus exactement des articles d'une catégorie en particulier. C'est le nombre total d'articles pour 1 catégorie qui fait que tu sauras le nombre de pages qu'il va avoir selon le nombre d'articles que tu souhaites afficher par page. Ce qui veut dire que pour démarrer cette pagination (par défaut par exemple), il faudrait au préalable savoir la catégorie pour obtenir ce nombre total d'articles pour après proposer une navigation page par page dans cette même catégorie. Donc soit le choix de la catégorie se fait lors d'une étape précédente, soit intégrer un menu déroulant pour choisir une catégorie. Au final il faut avoir 2 choses : - Une catégorie (la 1ère par défaut par exemple) - Un N° de page (la 1ère normalement). Tout ça si j'ai bien compris aussi.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
|
|
00
|
|
|
#4 | |||
|
Membre du Club
![]() Inscription : janvier 2010 Messages : 317 ![]() |
Bonjour. Merci pour votre réponse.
J'ai bien réussi à afficher toutes les catégories sur une même page avec leurs contenus. J'ai passé en revu : Citation:
Mais lorsque je passe à la page suivante dans une catégorie, ça un effet sur toutes les catégories. Ça je le comprends puisque, j'utilise une requête pour les catégories et à l'intérieur de celles-ci, j'utilise une autre requête pour les articles. Code :
Si je clique sur suivant ou précédent, ça va changer toutes les pages de toutes les catégories. J'ai essayé des versions en jquery. Pas de succès. J'ai essayé une pagination simple PHP/Mysql, ça change les pages mais sur la requête des articles. Faudrait que je puisse cliquer sur "suivant" d'une catégories et les pages changeraient que sur cette catégorie. Si je décide d'utiliser un menu déroulant, ça marche à merveille. Le problème serait résolu à ce moment là. Voila.
__________________
|
|||
|
|
00
|
|
|
#5 | ||||
|
Membre du Club
![]() Inscription : janvier 2010 Messages : 317 ![]() |
Bonjour, voici ma révision:
Code :
Code :
En tout cas pas avec PHP et MYSQL seuls. Mon poste restera non résolu.
__________________
|
||||
|
|
00
|
|
|
#6 | |
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 738 ![]() |
Si tu veux faire une pagination dans la même page pour chaque catégorie, il faut faire autant de paginations indépendantes qu'il y aura de catégories.
C'est à dire quelque chose comme ceci si j'ai bien compris : Citation:
Donc au tout début, il faudra des valeurs par défaut pour tout : page 1 - catégorie 1 page 1 - catégorie 2 page 1 - catégorie 3 ... etc ... Après cela, au moment (du moins juste avant) de faire chaque pagination, il faudra vérifier si les paramètres existent (page et catégorie). Admettons qu'on clic sur la page 2 de la catégorie 2, il y a aura alors une pagination différente uniquement sur celle-ci : On veut les articles de la page 2 Ce qui sous entend que pour les autres catégories ça sera une pagination par défaut (page 1 et les 1er articles). Donc lors de la 1ère boucle on va détecter qu'on souhaite la page 2 pour la catégorie 2. Il faudra alors faire une requête qui va rechercher les articles de la page 2 pour cette catégorie 2, puis un LIMIT tenant compte du nombre d'articles par page et du N° de page demandé. Si c'est 5 articles par page, ça doit donner : LIMIT 10, 5 Le principe est là il me semble. Le seul point commun qu'il y a pour toutes les catégories, c'est de faire une requête pour savoir le nombre total d'articles qu'il y a pour chaque catégorie (donc en boucle) pour créer la pagination. Essai de faire un scénario comme ci-dessus, et essai de voir quelles sont les données que tu as besoin pour faire cette pagination. Mais surtout, fait le pour 1 seule catégorie d'abord, et fonctionnel. A partir du moment où tu aura 1 qui fonctionne, tu sauras sur quoi se base la pagination. A coté de ça, pourquoi fait tu cela sur une même page ? N'est-ce pas trop lourd ? (faut prendre conscience que cette page sera recharger à chaque fois, donc les mêmes traitement pour toutes les catégories) Aussi, en faisant comme cela, la pagination ne concerne à chaque fois qu'une seule catégorie, et uniquement. Si tu veux faire une pagination sur plusieurs (ou toutes) catégories, comme visualiser d'un coup la page 2 de la catégorie1 et la page 3 de la catégorie2, le faire totalement en Php ca va être rude, très rude à mon sens. Ici, il vaut mieux opter pour de l'Ajax, pour 2 raisons : - plus simple à la mise en oeuvre (à condition de savoir faire de l'Ajax) - moins lourd car l'Ajax permet de faire cela en mode asynchrone, c'est à dire sans devoir recharger entièrement la page.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
|
|
|
00
|
|
|
#7 |
|
Membre du Club
![]() Inscription : janvier 2010 Messages : 317 ![]() |
Merci pour vous être donné la peine d'écrire ce texte.
Oui, vous avez tout à fait compris. C'est lister un contenu d'environs 5 articles par catégorie. Pour aller au 5 suivante d'une catégorie, je ferais suivant et je vois les 5 autres tout en ne changeant pas les autres. Actuellement, je suis capable de paginer un contenu d'une seule catégorie avec un menu qui va appeler la catégorie que je souhaite affiché (paginée) Je suis capable d'afficher le contenu paginé de plusieurs catégorie mais lorsque je change de page d'une catégorie, ça change aussi pour les autres catégories. Et c'est là le problème. Si la page suivante d'une des autres catégories n'existe pas, ça va indiquer une page au dessus du nombre total de cette catégorie ex 3 de 2 (page 3 du total de 2), ça pas de sens. Un autre hic, c'est que ça fait disparaitre le contenu quand c'est supérieur au nombre de pages de la catégorie touchée. J'avais essayé de mettre en paramètre le no de catégorie index.php?page=1&categorie=3, ça changeait quand même les autres pages. Je vais retenter de le faire et exposer mon problème. Pour l'ajax, je ne sais pas l'utiliser. ajout info : Je sais pas si ça ca me permettrait de faire ce que je veux. afficher plusieurs catégories. http://www.w3cgallery.com/w3c-blog/p...ith-pagination
__________________
|
|
|
00
|
|
|
#8 | ||
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 738 ![]() |
Citation:
Lors de la 1ère boucle sur toutes les catégories, tu as l'ID de la catégorie à chaque tour de boucle. Il faut faire les vérifications à ce moment là, pour chaque catégories. - Si l'ID correspond à l'ID en paramètre GET, alors il faudra tenir compte du N° de la page qui lui aussi se trouve en paramètre GET - Si l'ID ne correspond pas, alors le N° de page doit être 1 (page 1) Ensuite, concernant la pagination (page1, page2, etc ...), là encore, tout ce passe dans la 1ère boucle. - Faire une requête sur la catégorie en court pour récupérer ne nombre total d'articles (pour cette catégorie). C'est cela qui va permettre de savoir le nombre de pages qu'il va avoir (donc de liens) pour la catégorie en court (toujours), cela indépendamment du N° de page. Une fois le N° de page initialisé (selon les 2 conditions vu plus haut) : - on lance la requête qui va récupérer les articles de la catégorie en court et en tenant compte du N° de page initialisé et du nombre d'articles par page. A chaque tour de boucle (catégorie suivante), rebelotte : -> re-vérification pour initialiser le N° de page -> re-requête pour savoir le nombre total d'articles -> re-requête pour obtenir les articles selon le N° de page Les liens de chaque pagination doivent avoir 2 paramètres : l'ID de la catégorie en court et le N° de page correspondant, c'est obligatoire. Citation:
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
||
|
|
00
|
|
|
#9 | ||||||
|
Membre du Club
![]() Inscription : janvier 2010 Messages : 317 ![]() |
J'ai ajout ceci :
Code :
echo ' <a href="?page='.($page-1).'&cat='.$cat.'"><</a> '; Code :
Si je mettais pas , j'obitendrais toutes les articles dans toutes les categories. Complèt : Code :
Code :
Code :
http://localhost/index.php?page=2&cat=ORDINATEURS
Si j'aurais qqchose de plus simple, ça irait mieux.
__________________
|
||||||
|
|
00
|
|
|
#10 | |||
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 738 ![]() |
Tu ne tiens pas compte des explications que je t'ai mis :
Citation:
Code :
Si le N° de page reçu en GET est 5 alors qu'on ne sait pas si toutes les catégories ont 5 pages, alors ??? Vois tu le problème ?
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
|||
|
|
10
|
|
|
#11 | ||||||||
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 738 ![]() |
Petite parenthèse au passage.
Les 2 requêtes dans la 1ère boucle seraient mieux si elles sont identiques (entre autre avoir les jointures), sinon il persistera un risque d'avoir un décalage/une incohérence entre le nombre total et les articles récupérés. Comme ceci : Code :
Et aussi des alias aux champs a.id (a_id) et c.id (c_id), ce qui fait qu'il faut exploiter les alias a_id et c_id. Code :
A coté de ça, MySQL permet de faire cela un peu différemment. Exemple : Code :
Code :
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
||||||||
|
|
10
|
|
|
#12 |
|
Membre du Club
![]() Inscription : janvier 2010 Messages : 317 ![]() |
Je vais prendre le temps d'étudier ça et d'exercer.
Oui, j'avoue ne pas avoir tout compris dans ton message précédent. Un grand merci et je vais te donner un feedback. C'est grandement apprécié et en plus, je trouve les messages d'une grande qualité. Sincèrement.
__________________
|
|
|
00
|
|
|
#13 |
|
Membre du Club
![]() Inscription : janvier 2010 Messages : 317 ![]() |
Ça marche comme je voulais. Je suis très content.
Je vais m'attarder sur ça pour assimiler les changements. J'ai pas touché aux jointures mais je vais le faire aussi pour comprendre. Merci RunCodePhp.
__________________
|
|
|
00
|
|
|
#14 |
|
Membre du Club
![]() Inscription : janvier 2010 Messages : 317 ![]() |
Bonjour.
Je me demande si on peut garder la position des autres plutôt que de réinitialiser à 1.
__________________
|
|
|
00
|
|
|
#15 | |
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 738 ![]() |
Citation:
- Au départ on clique sur la page 2 de la catégorie 1. On l'affiche (les autres c'est la page 1). - Puis après on clique sur la page 4 de la catégorie 2, on affiche celle-ci + on conserve/affiche celle d'avant : page 2 de la catégorie 1 - et ainsi de suite au fil des clics ... C'est possible. Tu peux utiliser les un cookie ou une session, et stocker chaque catégorie (chaque ID) et le N° de page associé. Au départ les pages seront forcément la 1 (page 1), mais après ça variera, suffit de les ré-initialiser/mémoriser dans le cookie ou session.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
|
|
|
00
|
|
|
#16 | |||
|
Membre du Club
![]() Inscription : janvier 2010 Messages : 317 ![]() |
Citation:
Code :
Code :
echo ' <a href="?page='.($page-1).'&cat='.$_SESSION['cat_id'].'"><</a> ';
__________________
|
|||
|
|
00
|
|
|
#17 | ||
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 738 ![]() |
Code :
$_SESSION['cat_id'] = (int)$row['id']; Il te faut stocker/mémoriser TOUS les IDs de toutes les catégorie ET leur page associés. De plus, il faudra les initialiser selon certaines conditions. Il faut donc un tableau à plusieurs dimensions. Quelque chose comme : Code :
$_SESSION['pagination'][(int)$row['id']] = $page; - la clé de la 2ème dimension c'est la valeur de l'ID de la catégorie - Puis la valeur de cet ensemble c'est le N° de page Concernant les conditions, il faut en priorité vérifier la présence de l'ID de la catégorie en GET. - SI l'ID de la catégorie est présente en GET, alors on ré-initialise le N° de page de la session avec la valeur du N° de page en GET + on initialise $page avec cette même valeur (du N° de page en GET) - SINON on ne touche pas à la session, on initialise $page avec le N° de page dans la session. A coté de ça, quand on arrivera la toute 1ère fois dans cette page, la session "pagination" n'existera pas. Il faut à tout prix la créer, et ça 1 seule fois, et initialiser une page par défaut (page 1) Il faut faire cela dès de départ de la boucle sur les catégories. Code :
Rassemble tes idées : ce qu'il faut, quelles conditions, etc ... tout cela en français ... il n'y a pas besoin de savoir coder pour le faire
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
||
|
|
00
|
|
|
#18 | ||
|
Membre du Club
![]() Inscription : janvier 2010 Messages : 317 ![]() |
J'ai tenté des scénarios. J'ai pas beaucoup de facilité à exprimer le déroulement. C'est une faiblesse que j'ai.
J'ai commenté dans le code ce que j'ai fais : Code :
Ce que je sais, quand tu veux mettre une variable dans une session, c'est ajouter comme ceci : variable = définition session = variable Là, je ne sais plus.
__________________
|
||
|
|
00
|
|
|
#19 | |||
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 738 ![]() |
Citation:
$_SESSION est un tableau superglobal (superglobal car il est visible/accessible partout : fonction, classe, etc ...), et on dit que : chaque élément qui le compose est une variable de session. La création d'une variable de session se fait en 1 opération. Exemple : Code :
$_SESSION['une_variable'] = 'Valeur de cette variable de session une_vriable'; C'est tout. Mise à part cette parenthèse, en me relisant j'ai remarqué que j'avais oublier de conserver un aspect important au niveau des conditions. Je reformule, et je le fait dans l'ordre. D'abord, tout ce passe à l'intérieur de la boucle while des catégories. 1/ On créer une variable de session "pagination" contenant un tableau dont la clé est l'ID de la catégorie en court et la valeur la page par défaut (1) SI elle n'existe pas. Le code je l'avais donné : Code :
Ensuite, c'est là où j'avais fais un oubli (je reformule donc) : 2/ Concernant les conditions, il faut en priorité vérifier la présence de l'ID de la catégorie en GET. - SI un ID de catégorie est présent en GET ET SI cet ID de catégorie est identique à l'ID de la catégorie en court ($row['id']) ALORS on ré-initialise le N° de page de la session de cet ID de catégorie avec la valeur du N° de page en GET + on initialise $page avec cette même valeur (du N° de page en GET) - SINON (on ne touche pas à la session) on initialise $page avec la valeur du N° de page se trouvant dans la session "pagination" correspondant à la catégorie en court. Tout est là normalement. Je ne mets pas le code volontairement, histoire de t'exercer (je sais c'est pas cool ).Essai de traduire ça en code, en condition et initialisation. Le reste du code (celui avant d'intégrer les sessions) devrait resté inchangé.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
|||
|
|
00
|
|
|
#20 | |||
|
Membre du Club
![]() Inscription : janvier 2010 Messages : 317 ![]() |
Je ne sais pas interprété:
Citation:
Code :
__________________
|
|||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com