Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework
Zend Framework Forum d'entraide sur la programmation PHP avec Zend Framework. Avant de poster -> FAQ ZF, Cours ZF
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 15/06/2011, 11h41   #1
Membre régulier
 
Inscription : février 2011
Messages : 114
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 114
Points : 77
Points : 77
Par défaut Zend_Paginator Problème de changement de page

Bonjour tout le monde,

je travaille actuellement sur un formulaire de recherche qui après validation affiche un tableau de résultats.
Ces résultats sont obtenus en interrogeant une base de données suite aux critères de recherche saisis par l'utilisateur.

Dans ma méthode de récupération des données du formulaire, je récupère des variables POST. Je fais des tests tel que:
Code :
1
2
3
4
5
6
 
if ($this->getRequest()->isPost()){
       // traitement des valeurs pour faire les réquêtes et récupérer les résultats
       // traitement de la paginatin
       ...
}
Selon les critères renseignés le tableau de résultats peut être très grand.
J'essaie donc d'utiliser le système de pagination à l'aide du composant Zend_Paginator pour n'afficher que 10 résultats par page.

Etant donné la taille de mes tables, je passe un 'select' à mon Zend_Paginator afin qu'il se charge d'executer la requête comme il se doit en exécutant une requête pour ne remonter que la liste des items de la page en cours.

L'affichage de la première page est ok, j'obtiens bien les 10 premiers résultats.
Le problème se pose lorsque je veux aller à une page suivante, la pagination reload mon action de récupération de données du formulaire avec comme paramètre GET page=2. Il ne rentre donc pas dans mon test : if($this->getRequest()->isPost()) et ne traite pas mes valeurs post ...

J'ai regardé sur le forum et ai essayé avec la mise en session de ma requête mais ça ne me donne aucun résultat.

Je suis coincé à cause de cela et ne vois vraiment pas comment faire

Merci d'avance pour toutes vos idées qui pourraient m'éclairer sur le problème.
flilou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2011, 20h57   #2
Membre confirmé
 
Avatar de Nighty
 
Homme Lucas CORBEAUX
Chef de projet MOE
Inscription : février 2003
Messages : 158
Détails du profil
Informations personnelles :
Nom : Homme Lucas CORBEAUX
Âge : 28
Localisation : France, Maine et Loire (Pays de la Loire)

Informations professionnelles :
Activité : Chef de projet MOE

Informations forums :
Inscription : février 2003
Messages : 158
Points : 291
Points : 291
En effet, pour pouvoir faire persister les critères de recherche de page en page, la session est le choix le plus évident : le Zend_Paginator ne fait rien de plus que passer le bon paramètre de page en utilisant le routeur Zend Framework.

Difficile de t'aiguiller sans une idée précise du code de ton contrôleur ceci dit, mais grossomodo :
- Initialise un Zend_Session_Namespace dans ton contrôleur, et assure-toi au passage d'utiliser un namespace unique à chaque contrôleur, ça t'évitera de te demander pourquoi les requêtes sur d'autres pages se mettent à planter
- Si la requête est en POST : enregistre les critères de recherche dans la session.
- Récupère les critères de recherche depuis la session : si tu viens de valider le formulaire c'est ceux que tu viens juste de fournir, sinon ils persistent de page en page.
- Et bien entendu continue d'utiliser les critères de recherche pour construire ta requête.

De cette façon, ça devrait marcher sans trop de soucis, le plus difficile sera de bien doser quand réinitialiser la session pour pas que cette persistance ne soit pénible pour l'utilisateur.
Nighty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 10h21   #3
Membre régulier
 
Inscription : février 2011
Messages : 114
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 114
Points : 77
Points : 77
Merci Nighty!

C'est ce que j'ai fait, j'ai mis mon formulaire de recherche dans une session et je fais un test:
- si je reçois des données en POST => mise en session du formulaire et construction de la requête à partir des données envoyées pour l'affichage de la première page
- je reçois des données en GET (le numéro de page) => récupération du formulaire en session et construction de la requête pour l'affichage des pages suivantes.

Ca a l'air de bien fonctionner, donc problème résolu
flilou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 12h07   #4
Membre confirmé
 
Avatar de Nighty
 
Homme Lucas CORBEAUX
Chef de projet MOE
Inscription : février 2003
Messages : 158
Détails du profil
Informations personnelles :
Nom : Homme Lucas CORBEAUX
Âge : 28
Localisation : France, Maine et Loire (Pays de la Loire)

Informations professionnelles :
Activité : Chef de projet MOE

Informations forums :
Inscription : février 2003
Messages : 158
Points : 291
Points : 291
Pas de problème, content d'avoir pu aider
Nighty 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 21h09.


 
 
 
 
Partenaires

Hébergement Web