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 :

Listes déroulantes liées [1.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2010
    Messages : 17
    Par défaut Listes déroulantes liées
    Bonjour,

    Je cherche à lier deux listes déroulantes (si l'on clique sur l'une, le contenu de la seconde est mis à jour en fonction)...

    J'ai testé de très bon tutoriaux pour pouvoir le faire en AJAX... Cependant je n'arrive pas à faire fonctionner cette méthode sous symfony.

    Y'a t'il une méthode particulière sous symfony ?

    Merci par avance de vos réponses.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Je sens que je vais me faire un topic cas pratiques étant donné que cette question revient tout le temps.

    Non, il n'y a pas de méthode particulière, tu dois normalement pouvoir faire exactement de la même façon que tes tutos ajax, en adaptant juste quelques détails :

    1/ Fait de façon à avoir ta première liste remplie correctement.
    2/ Fait ton javascript qui bind son event onChange et qui appelle une url. Dans tes tutos tu dois avoir une url genre "updateSecondList.php" et tu envoie un paramètre que tu appelles "id" par exemple qui correspond à la valeur choisie dans la première liste. Ben c'est exactement la même chose, sauf que tu vas mettre comme url '/monmodule/updateSecondList'
    3/ Tu vas dans "monmodule", et tu codes la methode executeUpdateSecondList qui va récupérer la liste des valeurs et soit te renvoyer le html de ta 2eme liste, soit juste les valeurs en json par exemple
    4/ Tu fais en sorte que ton javascript remplace le HTML de la 2nde liste par le html renvoyé si c'est la solution que tu as choisi, ou alors tu construit la liste en javascript avec les valeurs reçues en json.

    Voilà, c'est donc exactement la même chose, le seul truc qui change c'est l'endroit où tu code le PHP qui récupère la liste des valeurs. Sinon il n'y a rien de sorcier. Je te suggère d'essayer avec cette explication et de dire où est-ce que tu bloques précisément.

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2009
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 77
    Par défaut
    Bonjour SF_developpers
    Merci Tirkyth pour l'explication
    moi aussi j'ai le même problème
    mais a chaque fois je ne récupère rien

    je pense qu'il y a une partie manquante dans mon travaille

    si vous pouvez et si avez du temps , merci de nous faire un tutos détaillé sur ce truc la vraiment cava aider des milliers des développeurs Sf

    Merci d'avance

  4. #4
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2010
    Messages : 17
    Par défaut
    Voici le code se trouvant dans ma page essaiSecondSuccess.php :
    (pour l'histoire à un modèle correspond plusieurs handlers ^^)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    <script type='text/javascript'>
     
        function getXhr(){
                            var xhr = null; 
            if(window.XMLHttpRequest) // Firefox et autres
               xhr = new XMLHttpRequest(); 
            else if(window.ActiveXObject){ // Internet Explorer 
               try {
                        xhr = new ActiveXObject("Msxml2.XMLHTTP");
                    } catch (e) {
                        xhr = new ActiveXObject("Microsoft.XMLHTTP");
                    }
            }
            else { // XMLHttpRequest non supporté par le navigateur 
               alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
               xhr = false; 
            } 
                            return xhr;
        }
     
        /**
        * Méthode qui sera appelée sur le click du bouton
        */
        function go(){
     
            var xhr = getXhr();
            // On défini ce qu'on va faire quand on aura la réponse
     
            xhr.onreadystatechange = function(){
     
                // On ne fait quelque chose que si on a tout reçu et que le serveur est ok
     
                if(xhr.readyState == 4){
                    leselect = xhr.responseText;
                    // On se sert de innerHTML pour rajouter les options a la liste
                    document.getElementById('handler').innerHTML = leselect;
     
                }
            }
     
            // Ici on va voir comment faire du post
            xhr.open("POST","ajaxHandler",true);
            // ne pas oublier ça pour le post
            xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
            // ne pas oublier de poster les arguments
            // ici, l'id de l'auteur
            sel = document.getElementById('modele');
            idmodele = sel.options[sel.selectedIndex].value;
            xhr.send("idModele="+idmodele);
        }
    </script>
     
    <form>
        <fieldset style="width: 500px">
            <label>Modeles</label>
            <select name='modele' id='modele' onchange='go()'>
                <option value='-1'>Aucun</option>
                <?php   //ouverture de la base
                    $matis_db = cs_db(pl_HostName_matis, pl_DataBaseName_matis, pl_Login_matis, pl_PassWord_DB_matis);
                    $res = "SELECT  DISTINCT m.pkModele_num, m.strModele_nom  
                                FROM MODELE m, FAMILLE f
                                WHERE m.intModele_numFamille = f.pkFamille_num
                                    AND f.strFamille_intitule = 'HANDLER'
                                ORDER BY m.strModele_nom;";
                    $ed_execListModele = exec_sql($res, $matis_db, pl_MailAdmin_matis);              
                    while($row = mysql_fetch_array($ed_execListModele)){?>
                        <option value="<?php echo $row["pkModele_num"] ?>"><?php echo $row["strModele_nom"] ?></option>
                   <?php }?> 
            </select>
         </fieldset>   
            <div id='handler' style='display:inline'>
     
            </div>
     
    </form>
    Pour plus de détail tu peux lire ce super tutoriel : http://siddh.developpez.com/articles/ajax/

    Dans mon fichier d'action pour la fonction excuteAjaxHandler :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
        public function executeAjaxHandler(sfWebRequest $request)
        {
            $html = "<select name='id_handler'>";
            if($request->getParameter('id_modele')){
            //ouverture de la base
            $matis_db = cs_db(pl_HostName_matis, pl_DataBaseName_matis, pl_Login_matis, pl_PassWord_DB_matis);
            $req = "SELECT DISTINCT e.pkEquip_num, e.strEquip_nom
            FROM EQUIPEMENT e, MODELE m
            WHERE e.intEquip_numModele= ".$_POST["idModele"]."
            AND e.booEquip_operationnel = 1
            ORDER BY e.strEquip_nom;";
            $ed_execListKit = exec_sql($req, $matis_db, pl_MailAdmin_matis);
            while($row = mysql_fetch_array($ed_execListKit)){
             $html .= "<option value='".$row["pkEquip_num"]."'>".$row["strEquip_nom"]."</option>";
            }
            }
            $html .= "</select>";
            return $this->renderText($html);
        }
    Sur les conseils de Tirkyth, j'ai utilisé la methode renderText() qui fait juste un rendu de texte : ne pas oublié le "return" pour avoir cet affichage sans inclure une deuxième fois le layout.

    Un grand merci à Tirkyth pour son aide...

  5. #5
    Invité
    Invité(e)
    Par défaut
    Je pense faire un mini tuto ce week end. En espérant avoir le temps.

    fedora40, essaye de t'en sortir avec les quelques bouts de code donnés par leya_jarhan même si c'est pas très très propre . Ca te donnera peut-être une piste.
    Sinon je te suggère d'attendre ce week-end

  6. #6
    Membre confirmé
    Inscrit en
    Novembre 2009
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 77
    Par défaut
    merci leya_jarhan,
    merci Tirkyth,

    leya_jarhan : je pas compris est ce que vous utilisez Symfony ou c du code php
    je pense que vous n'utiliser pas l'ORM doctrine.
    si vous avez plus d'explication
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $res = "SELECT  DISTINCT m.pkModele_num, m.strModele_nom  
                                FROM MODELE m, FAMILLE f
                                WHERE m.intModele_numFamille = f.pkFamille_num
                                    AND f.strFamille_intitule = 'HANDLER'
                                ORDER BY m.strModele_nom;";
    Tirkyth, j'attends votre tuto ce weekend. !!

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

Discussions similaires

  1. Debug script listes déroulantes liées
    Par AnTiX dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 20/04/2005, 12h03
  2. Griser 1 liste déroulante liée à une autre, pb de concaténat
    Par linou dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/03/2005, 16h45
  3. listes déroulantes liées
    Par k4eve dans le forum Struts 1
    Réponses: 3
    Dernier message: 26/04/2004, 15h11
  4. Listes déroulantes liées entre elles
    Par denisC dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 27/07/2002, 15h53

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