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

  1. #1
    Membre à l'essai
    Inscrit en
    avril 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : avril 2006
    Messages : 17
    Points : 12
    Points
    12

    Par défaut Remplir un combo grâce a la sélection dans un autre combo.

    Bonsoir, je développe un projet sous mkframework. je désire remplir une combo en sélectionnant dans une autre combo. j'aimerais implémenter cela avec mkframework, mais je ne sais pas comment m'y prendre.

    Voici un aperçu du code de ma vue :

    Code html : 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
    <form method="post" action="" name="login_form" class="disableAjax login hide js-show" style="display: inline;">
            <fieldset>
            <legend>Recherche de pylônes</legend><div class="item" style=" ">
     
    	<div id="programBox">
    		<p id="zones">
    			Zone  :<select id="zoneSelect" onchange="request(this);" name="zoneSelect">
    				<option value=""></option>
              <option value="site">SITE</option>
              <option value="commune">COMMUNE</option>
              <option value="ville">VILLE</option>
              <option value="sous_prefecture">SOUS-PREFECTURE</option>
              <option value="departement">DEPARTEMENT</option>
              <option value="region">REGION</option>
              <option value="district">DISTRICT</option>
    			</select>
    			<span id="loader" style="display: none;"><img src="images/loader.gif" alt="loading" /></span>
    		</p>
     
    		<p id="libzones">
    			Libellé :<select id="libSelect">
     
    		</p>
    	</div>

    merci !. cordialement

  2. #2
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Ingénieur développement
    Inscrit en
    décembre 2006
    Messages
    5 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement
    Secteur : Finance

    Informations forums :
    Inscription : décembre 2006
    Messages : 5 129
    Points : 19 201
    Points
    19 201
    Billets dans le blog
    17

    Par défaut

    Vous avez deux choix

    • En javascript
    • Coté php


    1.En javascript, vous créer vos tableaux coté php, et vous créé des tableau coté javascript

    ainsi sur le onCHange du premier menu deoulant, vous appelez une fonction JS pour filtrer le second menu deroulant

    2. en Php: sur le onChange vous pouvez recharger la page avec une variable et utilisé ce nouveau parametre (avec _root::getParam) pour filtrer


    2 choix différents, lequel vous preferez ?


    Il y a une troisieme alternative en ajax bien sur (sur le on Change du premier menu déroulant, vous appelez une url qui ferra un innerHtml du second menu deroulant)
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  3. #3
    Membre à l'essai
    Inscrit en
    avril 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : avril 2006
    Messages : 17
    Points : 12
    Points
    12

    Par défaut choix de solution

    Merci beaucoup pour votre réponse. je préféré la deuxième solution ou encore celle avec AJAX.

  4. #4
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Ingénieur développement
    Inscrit en
    décembre 2006
    Messages
    5 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement
    Secteur : Finance

    Informations forums :
    Inscription : décembre 2006
    Messages : 5 129
    Points : 19 201
    Points
    19 201
    Billets dans le blog
    17

    Par défaut

    Si je comprends bien, vous avez le premier menu déroulant qui a des valeurs types
    • site
    • departement
    • ville
    • sous_prefecture



    Et vous avez une seconde liste de valeurs dependante ? vous pouvez avoir un tableau comprenant cet id discriminant ?

    Par exemple $tabZone avec le champ "zone"

    Ainsi vous auriez ce type de code:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <p id="libzones">
    			Libellé :<select id="libSelect">
     
    <?php foreach($this->tabZone as $oZone):?>
     <?php if($oZone->zone==_root::getParam('zoneSelect') ):?>
       <option value="<?php echo $oZone->monId?><?php echo $oZone->monLibelle?></option>
    <?php endforeach;?>
    </select>
    		</p>

    vous voyez l'idée
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  5. #5
    Membre à l'essai
    Inscrit en
    avril 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : avril 2006
    Messages : 17
    Points : 12
    Points
    12

    Par défaut congratulation

    Bonjour cher ami imikado. Merci pour toutes les réponses et cela me guide assez.

    En fait j'ai déjà fait ce genre de chose en programmation classique sous PHP. par exemple je crée :
    - Une page formulaire, qui à les deux menu déroulant + le code javascript/AJAX et qui affiche les résultats de la recherche dans le deuxième menu
    -Un fichier PHP qui exécute la requête et récupère les données dans une variable. ce fichier est indexé dans le code javascript de la page formulaire

    ce que je n'arrive pas à faire c'est avec le framework.

    j'ai trois fichiers:
    - le fichier main qui defini les paramètres des fonction et exécute
    -le fichier modèle (ex: model_ville), dans lequel ce trouves les fonction qui exécute les requête de sélection des villes
    -ma vue qui s’appelle ici recherche dans lequel se trouve les deux menus déroulants dont l'un doit se charger en fonction de la sélection de l'autre telle qu'indique le code que j'ai soumis plus haut.

    Les questions:
    1-Où doit-je mettre le code javascript/AJAX ?. évidemment pour moi c'est dans la vue recherche. mais là il bug et pose un problème de XML
    2-Quel est le fichier php que je doit appeler dans mon javascript/AJAX?
    3-Pour le code d'affichage du second menu déroulant, c'est ce que vous avez donnez. merci d'avance

    mon vrai soucis c'est le 1er et le 2ème point quel fichier php, le AJAX doit appeler et où mettre le javascript si possible une structure pour voir si c'est différent de ce que je fait habituellement.
    merci et bonne journée
    cordialement

  6. #6
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Ingénieur développement
    Inscrit en
    décembre 2006
    Messages
    5 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement
    Secteur : Finance

    Informations forums :
    Inscription : décembre 2006
    Messages : 5 129
    Points : 19 201
    Points
    19 201
    Billets dans le blog
    17

    Par défaut

    Bonjour,
    Voyez les fichiers main.php de chaque module comme des controlleurs, ce ne sont pas des ficheirs appelable

    si vous souhaitez mettre en place un appel ajax vers une page php, vous devez créer une "action" dans votre fichier main.php, c'est à dire une méthode publique préfixée par un underscore

    par exemple

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class module_monModule extends abstract_module{
     
     
    (...)
     
     public function _maPageAjax(){
        //mon code ajax
     }
     
     
    }


    et pour l'appeler coté de votre vue, vous appelerez: index.php?:nav=monModule::maPageAjax

    Vous voyez l'idée ?
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  7. #7
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    mars 2010
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : mars 2010
    Messages : 117
    Points : 126
    Points
    126

    Par défaut

    Bonjour

    Ce que Monsieur et ami imikado a donné est assez clair pour une personne
    qui a passé quelques heures sur ce fabuleaux Mkframework.

    Je vais essayer d'ajouter quelques autres exemples pour répondre à sa question "Vous voyez l'idée ?".

    Imaginons que vous avez un script javascript que vous n'appelez qu'à un seul endroit
    de votre site.
    Vous ne voulez pas donc le charger en même temps que votre layout comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ...
    <head>
    <script src="js/mootools/datepicker/Picker.Date.js" type="text/javascript"></script> 
    </head>
    ...
    Dans Mkframework, vous avez trois fichiers pour jouer.
    main.php dans le répertoire module
    par exemple list.php dans le répertoire module/view
    et model_fichier.php dans le répertoire model

    imaginons maitenant le contenu de mes fichiers
    pour votre script ajax, ici pour l'exemple
    j'indique seulement l'endroit où devra se trouver votre
    contenu ajax ou javascript...

    Voici par exemple mon fichier list.php
    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
    <table class="tb_list">
        <tr>
            
            <th>nom</th>
    
            <th>commentaire</th>
    
            <th>Actions</th>
        </tr>
        <?php if($this->tMk_contacts):?>
            <?php foreach($this->tMk_contacts as $oMk_contacts):?>
            <tr <?php echo plugin_tpl::alternate(array('','class="alt"'))?>>
                
            <td><?php echo $oMk_contacts->nom ?></td>
            ...
            </tr>   
            <?php endforeach;?>
        <?php else:?>
            <tr>
                <td colspan="3">Aucune ligne</td>
            </tr>
        <?php endif;?>
    </table>
    
    <p><a href="<?php echo $this->getLink('mkContacts::new') ?>">New</a></p>
    Voici également le contenu d'un fichier que je vais créer dans le répertoire
    module/view, que je nomme listScript.php

    [code]
    <script>
    function afficher(texte)
    {
    console.log(texte) ;
    }

    let lienPage = document.location.href;
    console.log("mon lien = "+lienPage) ;

    window.addEvent("domready", function(){
    console.log("La page est chargée !");
    });
    </script>
    </code>

    et pour finir un extrait du fichier main.php
    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
    ...
    public function _list(){
            
            $tMk_compteurs=model_mk_compteurs::getInstance()->findAll();
            
            $oView=new _view('mkCompteurs::list');
            $oView->tMk_compteurs=$tMk_compteurs;
            
            
            
            $oModulePagination=new module_pagination;
            $oModulePagination->setModuleAction('mkCompteurs::list');
            $oModulePagination->setParamPage('page');
            $oModulePagination->setLimit(20);
            $oModulePagination->setPage( _root::getParam('page') );
            $oModulePagination->setTab( $tMk_compteurs );
            
            $oView->tMk_compteurs=$oModulePagination->getPageElement();
            
            $this->oLayout->add('main',$oView);
            // le chargement du script
            $oView=new _view('mkCompteurs::listScript'); // le script javascript
            $this->oLayout->add('main',$oView);
            
            
            $oViewPagination=$oModulePagination->build();
            
            $this->oLayout->add('main',$oViewPagination);
        }
    
        <button onclick='afficher("merci beaucoup")'>Click me</button>
    ...
    Comme vous le voyez dans le fichier ci-dessus,
    j'ai chargé dans le main.php, et la vue list.php et listScript.php
    en même temps, ainsi, je pourrai intérargir avec les éléments.
    Ainsi en cliquant sur le bouton "Click me" sur list.php, j'ouvrirai
    la fonction javascript afficher(text) qui est sur listScript.php

    Cordialement

  8. #8
    Membre à l'essai
    Inscrit en
    avril 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : avril 2006
    Messages : 17
    Points : 12
    Points
    12

    Par défaut

    Merci à vous pour votre aide. je suis nouveau sur ce framework et je veux comprendre certaine chose.
    j'ai bien noté vos explications merci pour tout.
    cependant en analysant l'explication de hadeslabs, vous avé chargé dans le main.php, et la vue list.php qui contient les 2 comboset listScript.php qui contient le sript java. ce qui revient à ceci dans la programation classique en utilisant mon exemple:

    ///-----------------------------------------------code html page index.html---------------------------------------//

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    <title>Techniques AJAX - XMLHttpRequest</title>

    <style type="text/css">
    div {
    font-weight: bold;
    }
    </style>
    <script type='text/javascript'>

    function getXhr(){

    var xhr = null;
    if (window.XMLHttpRequest) // Mozilla, Safari,...
    xhr = new XMLHttpRequest();

    else if(window.ActiveXObject){ // Internet Explorer
    try {

    xhr = new ActiveXObject("Microsoft.XMLHTTP");


    } catch (e) {
    xhr = new ActiveXObject("Microsoft.XMLHTTP");

    }
    }
    else { // XMLHttpRequest non supporté par le navigateur

    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 && xhr.status == 200) {
    libselect = xhr.responseText;
    // On se sert de innerHTML pour rajouter la valeur au libSelect
    document.getElementById("libZoneid").innerHTML = libselect; //
    }
    }
    // Ici on va voir comment faire du post
    xhr.open("GET","ctrl.php",true); // <== Post methode d'envoie et projet_profil.php fichier d'action -- je prefère post --
    // 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 la zone
    selzone = document.getElementById('zoneid'); // <== ici zone selectioner
    zoneval= selzone.value; // <== prendre le valeur de variable zoneSelect

    xhr.send("zoneName="+zoneval); // <== id_projet envoyer

    }
    </script>

    <script src="http://code.jquery.com/jquery-latest.min.js"></script>


    </head>
    <body id="loginform"><div id="page_content">
    <div class="container">

    <h1>RECHERCHE DE PYLONES<br></bdo></h1>
    <div align="center"><em>Vous êtes connecté en tant que <spam style="color:red"> - Deconnexion</a></em></div>
    <div class="hide js-show" style="display: block;">
    <!-- Login form -->

    <form method="post" action="" name="login_form" class="disableAjax login hide js-show" style="display: inline;">
    <fieldset>
    <legend>Recherche de pylônes</legend><div class="item" style=" ">

    <div id="programBox">
    <p id="zones">
    Zone :<select id="zoneid" onchange="go();" name="zoneName">
    <option value=""></option>
    <option value="site">SITE</option>
    <option value="commune">COMMUNE</option>
    <option value="ville">VILLE</option>
    <option value="sous_prefecture">SOUS-PREFECTURE</option>
    <option value="departement">DEPARTEMENT</option>
    <option value="region">REGION</option>
    <option value="district">DISTRICT</option>
    </select>
    <span id="loader" style="display: none;"><img src="images/loader.gif" alt="loading" /></span>
    </p>
    <p id="libzones">

    Libellé :<select id="libZoneid">
    <option value="">-- Profils --</option>
    </select>
    </p>
    </div>
    <input type="submit" name="search">

    </fieldset>
    <fieldset class="tblFooters">
    </fieldset>

    </form></div></div></body>

    //-----------------------------------------------ctrl.php-------------------------------------------------------------------//
    <?php
    if(isset($_GET['zoneval'])) {


    echo $zoneName = htmlentities(intval($_GET['zoneval']));
    // requête qui récupère les départements selon la région
    $requete = "SELECT * FROM t_".$zoneName."
    ";


    // connexion à la base de données
    try {
    $bdd = new PDO('mysql:host=127.0.0.1;dbname=gespylone_db', 'root', '');
    } catch(Exception $e) {
    exit('Impossible de se connecter à la base de données.');
    }
    // exécution de la requête
    $resultat = $bdd->query($requete) or die(print_r($bdd->errorInfo()));

    // résultats
    while($donnees = $resultat->fetch(PDO::FETCH_ASSOC)) {
    // je remplis un tableau et mettant l'id en index (que ce soit pour les régions ou les départements)
    $index=$donnees['Ville_id'];
    $lib=$donnees['Ville'];
    echo "<option value='$index'>$lib</option>";
    }

    // envoi du résultat au success

    }
    ?>
    //---------------------------------------------------------------------------------------------------------------------------------
    ce code dans le classique fonctionne. c'est lui que je veux transcrire dans le framework.
    dans le javascript de la page index.html, j'appelle la page ctrl.php pour exécuter la requête et l'afficher toujours dans index.php.
    or dans l'exemple que vous m'avez donné, vous chargez les deux fichiers(listScript.php & list.php) dans la page main.php. A supposer que le contenu de votre page listScript.php est mon code javascript de ma page index.php, a quoi ressemblera le fichier ctrl.php que j'appelle dans mon javasript dans le cas du framework.

    en gros comment doit-je utiliser mon javascript de la page index pour qu’il fonctionne avec ce merveilleux framework?

    vous m'avez déjà donnée deux orientation précieuses à savoir comment utiliser le javascript et comment afficher le résultat dans ma vue. je vous remercie infiniment. très bonne journée à vous

    cordialement !

  9. #9
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Ingénieur développement
    Inscrit en
    décembre 2006
    Messages
    5 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement
    Secteur : Finance

    Informations forums :
    Inscription : décembre 2006
    Messages : 5 129
    Points : 19 201
    Points
    19 201
    Billets dans le blog
    17

    Par défaut

    Voila pour exemple

    j'ai repris votre exemple et créé un projet

    Dans l'idée j'ai dispatché dans le layout

    Ensuite un module default avec le formulaire

    et enfin la partie ajax dans un module ajax histoire de bien distinguer

    Enjoy
    Fichiers attachés Fichiers attachés
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  10. #10
    Membre à l'essai
    Inscrit en
    avril 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : avril 2006
    Messages : 17
    Points : 12
    Points
    12

    Par défaut congratulation

    Merci infiniment ça marche et j'ai compris le principe de fonctionnement. vraiment mille fois merci
    Excellente journée à vous.
    cordialement !

  11. #11
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Ingénieur développement
    Inscrit en
    décembre 2006
    Messages
    5 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement
    Secteur : Finance

    Informations forums :
    Inscription : décembre 2006
    Messages : 5 129
    Points : 19 201
    Points
    19 201
    Billets dans le blog
    17

    Par défaut

    De rien, je pense ecrire un tutoriel article sur ce genre de code car en effet ça peut paraitre abstrait pour certains
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/12/2012, 09h08
  2. Réponses: 6
    Dernier message: 24/08/2012, 09h23
  3. Réponses: 2
    Dernier message: 24/08/2011, 06h47
  4. Réponses: 2
    Dernier message: 13/12/2010, 18h25

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