Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework > MVC
MVC Forum de support sur le développement d'applications de type modèle-vue-contrôleur avec Zend Framework ainsi que vos questions sur les plugins, les helpers etc. Avant de poster -> Cours MVC, FAQ ZF Controller
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 27/05/2008, 14h10   #1
Membre habitué
 
Inscription : novembre 2004
Messages : 398
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 398
Points : 115
Points : 115
Par défaut Formulaire de recherche/filtrage

Bonjour

Je développe une application web avec ZF. Plusieurs action permettent l'affichage de données. Et pour éviter d'avoir des centaines de lignes affichées sur une seule page, j'ai mis en place un système de paginations basé, globalement, sur le même principe que ce tuto : http://julien-pauli.developpez.com/t...istage-tables/ .
Jusqu'à présent tout fonctionne parfaitement. Mais je souhaite ajouter, pour les actions devant afficher beaucoup de données, un formulaire permettant de rechercher/filtrer les données selon certains critères (date, nom, ...). J'ai donc ajouté un formulaire et une fonction dans mon contrôleur (en réalité le contrôleur parent de tous mes contrôleurs) qui va traiter les données du formulaire et exécuter la requête en conséquence.
Voilà, ici encore, ça fonctionne plutôt bien.

Les problèmes surviennent lorsque la pagination est utilisé parallèlement à la fonction de recherche. En gros tout fonctionne uniquement si je me trouve sur la première page.

Exemple du problème qui se pose :

Mes URL sont semblable à ceci :

www.truc.com/module/controleur/action

et lorsque la pagination est utilisée :

www.truc.com/module/controleur/action/page/1
www.truc.com/module/controleur/action/page/2
...

L'url de l'action à exécuter par le formulaire est déterminée par :

Code :
1
2
 
$this->Url(array())
Ce qui fait que si j'envoie le formulaire alors que je me trouve, disons, sur la page 3, j'aurai au final la page trois affichée. Même si je n'ai pas trois pages de résultats après recherche.

Mes idées pour éviter ce genre de problème :

vérifier si la requête est de type GET ou POST. Si c'est POST c'est que le formulaire a été envoyé, il s'agit d'une recherche et donc réduction de l'url www.truc.com/module/controleur/action/page/2 à www.truc.com/module/controleur/action

Mais il y a un autre problème. si la recherche me donne effectivement plusieurs page et que je passe à la page suivante la recherche sera perdue et j'aurai à nouveau la totalité des enregistrements. Pour ce problème-ci, je pense enregistrer les données du formulaire en session et les récupérer lors du passage à la page suivante.


j'aurais donc quelque chose du genre :

Code :
1
2
3
4
5
6
7
8
 
if post
   réduction de l'url
   requête filtrée
else if session
   requête filtré
else
   requête "normale"


Voilà mes idées actuelles.

Mais je suis débutant avec ZF, donc je me demandais s'il y avait un moyen de gérer ce type de recherche plus facilement


Merci d'avance pour vos commentaire
JuTs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2008, 17h32   #2
Membre confirmé
 
Développeur Web
Inscription : mai 2008
Messages : 185
Détails du profil
Informations personnelles :
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2008
Messages : 185
Points : 212
Points : 212
Bonjour,

J'ai eu pendant un temps le même souci, 3 critères de tri differents pouvant être utilisés en simultanés + pagination
Pour résoudre les problèmes d'url, je regenère des url spéciales pour chaque critère de tri dans ma vue ( je lui assign tous les paramètres pour les récuperer )
Donc par exemple je veux un tri ( date ou nom ), puis avoir la page 2, je fais une url ou j'ai <base>?order=date, et une autre ou j'ai <base>? Ensuite, à l'endroit ou je dois avoir les liens, je réutilise ces liens, c'est à dire : si on est dans le cas pour changer de tri, je reprends <base>?, et j'ajoute &tri=date ou &tri=nom, si on est dans le cas d'un changement de page, je reprends <base>?order=date, et j'ajoute &page=x

Bon, c'est sur, c'est pas générique, pas évolutif, mais ca marche @_@
En esperant que tu ais compris l'idée
Bonne chance !
LoveAngel est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h45.


 
 
 
 
Partenaires

Hébergement Web