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

Symfony PHP Discussion :

select_tag : recupérer les choix dans l'action [1.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de Giovanny Temgoua
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    3 830
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 3 830
    Par défaut select_tag : recupérer les choix dans l'action
    Bonjour,

    Dans un template, j'ai ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo select_tag('moduleschoisis', objects_for_select($choisis, 'getId', '__toString'), array('multiple'=>'multiple', 'size'=>'10', 'style'=>'width:150px;align:right'))?>
    qui permet à l'utilisateur de visualiser une listes d'objets.

    J'ai exactement 2 select_tag comme ceci et je souhaiterai pouvoir recupérer leur contenu dans mon actions (j'ai dû refaire mon propre admin_double_list parce que j'avais besoin d'un support AJAX dans le template).

    Dans l'action, je fais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $moduleschoisis = $this->getRequestParameter('moduleschoisis');
    Mais j'ai à chaque fois une erreur, comme quoi $moduleschoisis n'est pas un array (j'ai essayé de faire un foreach dessus).

    Et j'ai confirmation de cela en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "<script&gt;alert('count = ".count($this->getRequestParameter('moduleschoisis'))."')</script>" ;
    qui me retourne 0 ! (merci à phpiste pour cette astuce )

    Comment je fais pour recupérer les valeurs de mon select_tag ?


  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Par défaut
    Bonjour,

    dans les options du select_tag :
    Ça devrait faire l'affaire

  3. #3
    Nouveau candidat au Club
    Inscrit en
    Septembre 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 2
    Par défaut même besoin admin_double_list AJAX
    Bonjour,

    j'ai le même besoin de faire un admin_double_list en ajax (car la liste contient plusieurs milliers d'éléments).

    je commence seulement symfony. Du coup, je ne sais pas exactement comment écrire proprement un admin_double_list_ajax qui serait réutilisable. Des pistes ?

    merci d'avance

  4. #4
    Rédacteur
    Avatar de Giovanny Temgoua
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    3 830
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 3 830
    Par défaut
    Déjà le admin_double_list_ajax est un peu plus complexe à mettre en oeuvre.

    Mais je donne déjà la solution pour recupérer les choix des actions. En fait, lorsqu'on a une liste de choix, il faut qu'à la validation du formulaire, il faut sélectionner chaque élément de la liste de choix afin qu'il soit accessible au script PHP. Ce n'est donc pas une limitation de symfony...

    Du coup c'est pourquoi je ne recevais rien comme éléments sélectionnés. Il y'en avait mais il n'était pas sélectionné tout simplement.

    Comment sélectionner ? En utilisant le JavaScript.

    En analysant les fichiers générés par l'admin generator, on se rend compte que les formulaires qui ont des listes comportent cette ligne :

    <form id="sf_admin_edit_form" name="sf_admin_edit_form" on submit="double_list_submit();>
    C'est ce script JS qui sélectionne les éléments à la validation et qui rend donc les éléments sélectionnés accesibles.

    En analysant le script, on a ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function double_list_submit(form_name)
    {
    [...]
          if (element.className == 'sf_admin_multiple-selected')
          {
            for (var j = 0; j < element.options.length; j++)
            {
              element.options[j].selected = true; //<--- La clé de tout ici <--- <--- <---
            }
          }
    [...]
    }
    J'ai mis un commentaire très explicite sur la ligne qui est interessante.

    Tout ce code se trouve dans le fichier sf/sf_admin/js/double_list.js. Sa localisation dépend de comment le projet est configuré. Vous pouvez le copier du répertoire d'install de symfony (j'ai installé avec PEAR) ou faire un lien symbolique si vous avez créer un VirtualHost.

    Comme tous les templates ne seront pas forcément admin, vous pouvez donc simplement copier le fichier double_list.js et vous en inspirer.

    Par la suite, la version AJAX peut s'obtenir simplement.

    Dans le double_list, on a deux listes de sélection et deux boutons pour faire bouger les objets entre les deux listes. En particulier dans le code input des boutons, on a ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onclick="double_list_move([...]); return false;"
    L'astuce que je proposerais consisterais à modifier la fonction JS double_list_move pour déclencher un appel AJAX à la place. Pour le moment, la façon la plus réutilisable de faire cà est de ne pas utiliser l'admin generator et d'utiliser des components à la place.

  5. #5
    Nouveau candidat au Club
    Inscrit en
    Septembre 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 2
    Par défaut merci et plus de nouvelles bientôt
    Merci de ces infos.

    Je me lance et vais tenter de faire mon admin_double_list_ajax.

    Précision: l'ajax ne sera pas utilisé pour mettre à jour immédiatement le serveur à chaque modification de la liste, mais pour filtrer le contenu affiché par la liste (les tables associées à la relation n-n font plusieurs milliers de lignes).

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

Discussions similaires

  1. Rendre dynamique les choix dans un select
    Par Boueep dans le forum Langage
    Réponses: 16
    Dernier message: 01/02/2009, 08h57
  2. Réponses: 1
    Dernier message: 13/05/2008, 09h53
  3. recupérer les données dans une iframe
    Par jamel3000 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/06/2007, 19h49
  4. Mémoriser les choix dans un formulaire
    Par ceuce dans le forum IHM
    Réponses: 7
    Dernier message: 15/03/2007, 09h13
  5. [C#] Contrôler les choix dans un ComboBox
    Par kinou dans le forum Windows Forms
    Réponses: 1
    Dernier message: 17/08/2006, 14h40

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