|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre régulier
![]() Inscription : février 2011 Messages : 114 ![]() |
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 :
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. |
||
|
|
00
|
|
|
#2 |
|
Membre confirmé
![]() ![]() Lucas CORBEAUXChef de projet MOE Inscription : février 2003 Messages : 158 ![]() |
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. |
|
00
|
|
|
#3 |
|
Membre régulier
![]() Inscription : février 2011 Messages : 114 ![]() |
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
|
|
|
00
|
|
|
#4 |
|
Membre confirmé
![]() ![]() Lucas CORBEAUXChef de projet MOE Inscription : février 2003 Messages : 158 ![]() |
Pas de problème, content d'avoir pu aider
|
|
00
|
Copyright © 2000-2012 - www.developpez.com