|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre à l'essai
![]() Jonathan Inscription : décembre 2010 Messages : 41 ![]() |
Bonjour,
Es ce-que quelqu'un pourrais me dire comment lier deux listes avec les filtres symfony sans ajout du code JavaScript. En fait j'ai les groupes dans ma première liste, et les utilisateurs dans la deuxième. La deuxième liste doit être remplir selon le choix de la premier. Et lors de la sélection d'un utilisateur dans la deuxième liste il doit y avoir l'appel d'une action de mon contrôleur pour afficher un résultat. Comment faire tous ça sans JavaScript. |
|
|
00
|
|
|
#2 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Ca ne doit pas être trop compliqué.
Tes deux listes sont liée à une table ? Deux tables ? Les données retournées sont-elle elle-même reliées à un enregistrement d'une troisième table ? Il y aura donc, sur ton form, un bouton à proximité de la première liste pour remplir la deuxième, est-ce ça l'idée ? Y a-t-il d'autres champs sur ton form ? Si oui, y a-t-il des validator qui risquent de ce fâcher s'il revient vide ? Ceci afin de cerner mieux le problème.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#3 |
|
Membre à l'essai
![]() Jonathan Inscription : décembre 2010 Messages : 41 ![]() |
- Mes listes sont lies à deux tables (Nom des tables: groupe et utilisateur) Ces tables sont lies entre elles par une clé étrangère (id_groupe) dans la table utilisateur.
- Oui, mes données retournées seront utiliser comme prédicat pour récupérée des données dans une autre table. (Je récupère en fait dans une table affectations, tous les tâches affecter à un utilisateur). - Pas de bouton pour remplir la deuxième liste. Le remplissage doit se faire lorsque on sélectionne le groupe. Et pareil lorsque on sélection l'utilisateur (gère requêtes AJAX). - Pour l'instant pas de validateur. |
|
|
00
|
|
|
#4 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Juste pour fixer.
Les données récupérées de ces deux listes ne sont pas utilisées dans un enregistrement directement. Le form qui les récupère permet de monter un filtre pour d'autres données ? Ne pourrait-on pas monter cela dans un form de type filter ? Tu veux que le changement dans la première liste lance automatiquement le ré affichage de la page, sans JS. C'est impossible hos JS, il faut passer par un bouton et une manœuvre de l'utilisateur, c'est peut-être ton blocage. Après, rien n'empêche si le JS est actif de masquer le bouton et changer le comportement de la liste.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#5 |
|
Membre à l'essai
![]() Jonathan Inscription : décembre 2010 Messages : 41 ![]() |
Non, Les données récupérées de ces deux listes ne sont pas utilisées dans un enregistrement directement.
Pas de filtre pour le Form. J'aimerais monter tous ça avec les filtres déjà crées par symfony mais je vois pas comment les utiliser. Et le tutoriel Joobet ne parle pas assez. |
|
|
00
|
|
|
#6 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Il n'y a pas de réel tutoriel sur les filtres. En pratique c'est très proche des form, sauf qu'il y a des méthodes qui permettent de générer la partie querry d'une requête doctrine (ou propel).
Donc, pour notre partie de gestion des deux listes, que l'on soit sur un form ou un filter, la procédure sera la même. Affichage du form la première fois. La liste 1 est remplie, la 2 vide. Lors du retour, on vérifie le bouton qui a renvoyé si le bouton est celui qui demande d'afficher la deuxième liste et en fonction de la valeur de la première, on renvoie la deuxième avec une requête paramétrée. Le problème est que je ne vois pas, pour l'instant, de méthode propre pour renvoyer, il faudrait que je monte un test, je vais essayer ce soir, si non, ce sera pour l'année prochaine
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#7 | ||||||||||||
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Pas simple la solution, mais intéressante.
La difficulté vient du fait qu'il n'est pas possible de faire passer simplement un argument à doctrine pour savoir sur quel élément de la liste 1 on se trouve. Après avoir tourné le problème dans tous les sens, je n'ai trouvé que le stockage temporaire en flash sur l'objet de l'utilisateur qui permette d'y arriver. Cette méthode ne me plais pas, mais elle à au moins la délicatesse de fonctionner. Un petit exemple basé sur des département et des régions. Le shema.yml pour l'exemple : Code :
Code :
Il faut modifier les objets du modèle region et deptartement pour leur ajouter une méthode __toString() qui les affiches en texte dans les listes. L'action qui permet de mettre la liste à jour. Le bouton pressé n'est pas géré. Code :
Code :
Code :
La méthode sur departementTable Code :
On pourrait gérer la valeur à donner si le paramètre region n'est pas renseigné dans le flash, ce qui arrive au premier affichage du form, mais c'est dépendant de l'application. J'espère que cela répondra à ta question.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
||||||||||||
|
00
|
|
|
#8 |
|
Membre à l'essai
![]() Jonathan Inscription : décembre 2010 Messages : 41 ![]() |
Merci beaucoup, ça réponds à ma question et me donne des idées pour la suite. Encore merci.
|
|
|
00
|
|
|
#9 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Je suis tombé (sans me blesser) sur le widget :
sfWidgetFormDoctrineChoiceGrouped qui est livré avec sfFormExtraPlugin Tu peux y faire une liste regroupée sur un champ défini par le paramètre "group_by" dans les options. Peut-être une autre manière de résoudre le problème des régions et départements.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
Copyright © 2000-2012 - www.developpez.com