IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Tri et pagination


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 183
    Par défaut Tri et pagination
    Bonjour à tous.

    J'ai un problème de raisonnement. Si je comprends la marche à suivre, il est possible que je puisse le traduire en script mais j'arrive pas à trouver la logique du truc.

    Voilà, en deux mots. Il s'agit d'une boutique, avec en tête de page la possibilité de trier par catégories ou par sous-catégories ou encore par produits.

    Le visiteur choisit une categorie ($categ) et je trie dessus avec un WHERE dans ma requete SQL.

    Il peut y avoir 4 ou 5 pages de résultats (sur 30 au total de la base avec 10 résultats par page). La pagination est correcte et fonctionne bien. MAIS...

    Lorsque le visiteur trie sur une $categ, la première page lui donne les premiers résultats correspondants à sa demande. mais à la seconde page, le script revient au trie sur la base entière.

    Pas moyen de rester sur les données triées durant les 4 ou 5 pages nécessaires.

    Et je n'arrive pas à voir, dans mon esprit, comment y parvenir.

    Quelqu'un aurait une idée ? Vous avez déjà dû être confrontés à ce genre de problème. Ca parait simple et évident mais je n'arrive pas à me mettre les idées en place la dessus...

    Merci à tous de votre aide.

    Cordialement.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 97
    Par défaut
    Je pense que si tu savais expliquer clairement ton probleme ... tu aurais deja la solution.

    Quand l'utilisateur choisit une categorie et qu'il voit la premiere page correctement. Il faut que dans cette page tu conserve l'information de la categorie qui a ete choisie. Notament il faut par exemple mettre cette informations dans tout les liens <a href="liste.php?categorie=lingerie&page=2"> page 2 </a> etc

    A mon avis c'est la que le bas blesse dans ton application.

    Sinon mets de print_r de tes GET/POST en debut de script pour voir quelles donees tu recois et demande toi si tu as toutes les informations necessaires pour afficher ce que tu veux (moyennant recherche dans la bd) et si tu fais la recherche appropriee !

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 183
    Par défaut
    Merci de ta réponse.

    En effet c'est à peu près ce vers quoi je tendais.

    Sauf que, je démarre sur la page index.php et, sur cette page, il y a tout : la déclaration des variables, les tris des GET et POST possibles, la définition de la requète SQL en fonction du ou des choix du visiteur, et j'en passe. Une usine à gaz....

    Pour bien faire, il me faudrait éclater cette page en 10, mais cela, à quelques lignes près, différentes à chaque fois bien sûr, reviendrait à créer 10 pages de même volume...

    Dans le passage de la page (href='page.php?categ=$categ...) il me faudrait passer le N° de la page, la page de départ du tri, celle d'arrivée, la catégorie, et peut-être encore un ou 2 paramètres...

    L'usine à gaz je disais...

    Pourtant il doit y avoir une solution plus simple. Les SESSION peut-être, mais je n'arrive pas à trouver le raisonnement qui soit cohérent.

  4. #4
    Membre éclairé Avatar de Huntress
    Femme Profil pro
    Inscrit en
    Août 2004
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 475
    Par défaut
    Bonsoir,

    Tout ceci à l'air très confus et pourtant tu sembles savoir ce que tu veux... faut dormir la nuit

    Donc ton index semble gérer les requêtes sur "catégorie", "sous catégorie", et "produit"... Donc oui je te conseillerais de stocker en session le choix de l'utilisateur.

    Ensuite à partir de cette variable tu dois compter le nombre d'enregistrements dans la table correspondante. Et ainsi grâce à ce chiffre tu peux constituer le LIMIT de ta requête (sachant que le 2nd chiffre est une constante que tu auras défini). Mais tout çà je pense que tu l'as fait.

    La dernière étape consiste à coder une fonction de pagination. Alors là par contre il va te falloir trouver un modèle. Une liste déroulante ? Une pagination à la Google ? Une pagination comme celle de developpez.net ? Fais ta fonction... en fonction de l'aspect qu'elle doit avoir.


    Et pour finir, je crois qu'andr386 te donne un bon conseil sur le format des URLs. Il faut garder dans l'adresse la "catégorie" pour que l'accès à tes pages puisse se faire directement.
    Mieux encore : plutôt que de faire des URLs de type liste.php?categorie=lingerie&page=2 ; tu pourrais faire http://www.monsite.com/1,lingerie/page-2/ (ou une autre forme...). Mais c'est une toute autre histoire.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 183
    Par défaut
    Merci de vos réponses.

    Ca y est, j'ai résolu le pb.

    Sur la page index, je traite, s'il y en a, tous les tris.

    S'il n'y a pas de tri à effectuer, j'affiche toute la base, classée par produits et par alpha ASC, sinon je charge les 5 paramètres nécessaires et qui correspondent au choix du visiteur dans des $_SESSION (dont la ligne $sql).

    Puis je fais un header à une page2 qui extract les $_SESSION, fait la requète mysql et affiche les résultats. Elle tourne sur elle-même en cas de résultats multi-pages.

    Sont affichées néanmoins (comme sur la page index) la barre de recherche (pour que le visiteur puisse définir soit le produit, soit sa catégorie, soit sa sous-catégorie ainsi que le nb de résultats affichés par page), et la barre de titres de colonnes (les + anciens, produits, prix, promo ou pas, les + commandés) sur lesquels le visiteur peut aussi cliquer et obtenir ASC ou DESC le classement de son choix.

    Ce qui fait que quand il est sur la page2, il n'y est pas scotché, il peut s'en sortir quand il désire.

    Shéma général :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
     
    index.php __
                 __ initialisation des variables
                 __ include barre_de_recherche.inc
                 __ include barre_de_titres.inc
                 __ analyse (tris ou pas). Si tris...
                          __ tri 1
                                  __ $sql = "SELECT.....
                          __ tri 2
                                  __ $sql = "SELECT.....
                          __ tri 3
                                  __ $sql = "SELECT.....
                          __ définition des sessions
                                  __ $_SESSION["sql"] = $sql
                                  __ $_SESSION["nb_par_page"] = $nb_par_page
                                  __ $_SESSION["categ"] = $categ
                                  __ ...
                           __ redirection
                                    __ redirection("page2);
                                             __ extract $_SESSION
                                             __ mysql_query($sql, GetMyConnection()
                                             __ affichage
                                             __ include pagination.inc
                __ pas de tri
                        __ $sql = "SELECT * FROM boutik";
                        __ mysql_query($sql, GetMyConnection()
                        __ affichage
                        __ include pagination.inc
    Simple, léger, facile à débugger, ça marche du tonnerre, sans temps d'attente.

    Cordialement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [ZF 1.10] Mémorisation formulaire de filtre et de tri avec pagination
    Par ilalaina dans le forum Zend_Form
    Réponses: 1
    Dernier message: 24/06/2010, 11h23
  2. [DisplayTag] Tri et pagination ne font pas bon ménage
    Par tiboudchou dans le forum Taglibs
    Réponses: 4
    Dernier message: 31/03/2010, 13h22
  3. Gridview tri et pagination
    Par Ya7yaKech dans le forum ASP.NET
    Réponses: 2
    Dernier message: 17/05/2009, 20h06
  4. Tri et pagination myFaces
    Par maloups dans le forum JSF
    Réponses: 13
    Dernier message: 29/06/2007, 12h44
  5. Tri et pagination du datagrid qui ne marche pas
    Par paradeofphp dans le forum ASP.NET
    Réponses: 2
    Dernier message: 30/05/2007, 18h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo