Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 17-04-2012 19:33:26

tahaaa
Membre
Date d'inscription: 17-04-2012
Messages: 14

Remplir en getJSON un element SELECT automatiquement

Bonjour

Dans un formulaire, j'ai 2 champs : Un 1er champ de type SELECT dans lequel j'ai les villes (BDD: table..>ville ....>ID_VILLE;VILLE), puis un 2eme champ de type SELECT dans laquelle j'ai les quartier (BDD: table..> quartier..> ID_QUARTIER;ID_VILLE;QUARTIER).

Je souhaite que tout changement dans le 1er champ ville mette à jour dynamiquement la liste de choix dans le second champ quartier.

je tente d'utiliser JQUERY et JSON.

*********page AjoutBien.phtml*****************

function populateFruitVariety() {
        //alert($('#ville').val());
        $.getJSON('/index/getville', function(data) {
       alert($('#ville').val());
        var select = $('#quartier');
        var options = select.attr('options');
        $('option', select).remove();

        $.each(data, function(index, array) {
            options[options.length] = new Option(array['quartier']);
        });

    });

}

$(document).ready(function() {
   
    populateFruitVariety();
    $('#ville').change(function() {
        populateFruitVariety();
    });
   
});

<form action="<?php echo $this->escape($this->element->getAction()); ?>"
      method="<?php echo $this->escape($this->element->getMethod()); ?>">
<td width="65%" height="27"><?php echo $this->element->ville->renderViewHelper(); ?></td>
<td width="65%" height="27"><?php echo $this->element->quartier->renderViewHelper(); ?></td></form>

************page IndexController.php*******************

public function getvilleAction(){
            $id = $this->_request->getParam('id');
           
                           $q = Doctrine_Query::create()
                                ->select('QUARTIER')
                            ->from('App_Models_Quartier q')
                            ->where('q.ID_VILLE = ?', $ $id);
                            $rows = $q->execute();
                            $this->_helper->json($rows);
                            echo json_encode($rows);
                        
}

************page Bootstrap *************************
    protected function _initView()
{
    // Initialize view
    $view = new Zend_View();
    $view->doctype('XHTML1_STRICT');
    $view->headMeta()->appendHttpEquiv('Content-Type',
                                       'text/html; charset=utf-8');
    $view->addHelperPath('Zend/Dojo/View/Helper/', 'Zend_Dojo_View_Helper');
    $view->addHelperPath('App/View/Helper/', 'App_View_Helper');
    $view->addHelperPath('ZendX/JQuery/View/Helper', 'ZendX_JQuery_View_Helper');
    Zend_Dojo::enableView($view);
    Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml');

    // Add it to the ViewRenderer
    $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer');
    $viewRenderer->setView($view);
   

    Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);
    //seulement si on utilise d'autres frameworks ajax
    ZendX_JQuery_View_Helper_JQuery::enableNoConflictMode();
    // Return it, so that it can be stored by the bootstrap
    return $view;
}

**************************************************************

Merci d'avance.

Hors ligne

 

#2 19-04-2012 11:22:39

tahaaa
Membre
Date d'inscription: 17-04-2012
Messages: 14

Re: Remplir en getJSON un element SELECT automatiquement

personnes ne veux m 'aidee <:

Hors ligne

 

#3 19-04-2012 14:10:00

shadypierre
Membre
Date d'inscription: 24-03-2010
Messages: 617

Re: Remplir en getJSON un element SELECT automatiquement

Pas trop le temps de rentrer dans les détails mais voici dans les grandes lignes la méthode que j'utilise :

Controller :
Dans le predispatch je défini le contexte a JSON pour l'action chargé de retourner les données remplissant le select. L'action ressemble à ceci :

Code:

public function quartierAction()
{
    $quartier = getQuartiers($idVille); // retourne un array()
    $this->view->data = $quartier;
}

View :
Je crée un évènement sur le changement de mon select option qui appel en ajax l'action 'quartier' avec le paramètre format = json (pour utiliser le contexte json) et ensuite je remplie mon select suivant avec le retour de cette fonction

Voila smile rien de plus simple

ps : à noter que le contexte JSON permet de transformer automatiquement en JSON les données transmissent à la vue.

Dernière modification par shadypierre (19-04-2012 14:10:54)

Hors ligne

 

#4 19-04-2012 18:46:50

tahaaa
Membre
Date d'inscription: 17-04-2012
Messages: 14

Re: Remplir en getJSON un element SELECT automatiquement

j ai predispatch je défini le contexte a JSON et j ai crée l action quartier et  a la fin de mon action j ai mis echo json_encode($rows); mais sur la page AjoutBien.phtml ca me retourne rien voila le code pr recupere

        $.ajax(
    {
           url: 'quartier',
           type: "POST",
           context: document.ajax,
           data: {"format" : "json",
                  "id" : $('#ville').val()},
           success: function(data)
           {
            var select = $('#quartier');
                var options = select.attr('options');
            $('option', select).remove();
               $.each(data, function(index, array) {
                    options[options.length] = new Option(array['quartier']);
                             });
          }

});


NB : sur l action quartier j ai mis echo $this->_request->getParam('id'); ca m affiche ca sur une fenetere http apach

Dernière modification par tahaaa (19-04-2012 18:49:07)

Hors ligne

 

#5 19-04-2012 20:07:13

shadypierre
Membre
Date d'inscription: 24-03-2010
Messages: 617

Re: Remplir en getJSON un element SELECT automatiquement

Tu n'as pas besoin du json_encode : http://framework.zend.com/manual/fr/zen … h.contexts

Par défaut cependant, aucun script de vue n'est nécessaire, il va simplement sérialiser en JSON toutes les variables de vues, et les envoyer en tant que réponse.

Ensuite je suis pas top en js mais je vois pas ou tu dis dans ce code que lors d'un changement du premier select tu fais ton appel ajax

Hors ligne

 

#6 20-04-2012 11:42:54

tahaaa
Membre
Date d'inscription: 17-04-2012
Messages: 14

Re: Remplir en getJSON un element SELECT automatiquement

voila le code pour rappler l' Ajax :

<script>
function populateFruitVariety() {
        alert($('#ville').val());
       
        $.ajax(
    {
           url: 'getville',
           type: "POST",
           context: document.ajax,
           data: {"format" : "json",
                  "id" : $('#ville').val()},
           success: function(data)
           {
            alert("ttt");
            $("#ajax").html(data);
                var select = $('#quartier');
                var options = select.attr('options');
                $('option', select).remove();
                $.each(data, function(index, array) {
                    options[options.length] = new Option(array['quartier']);
                });
           }});
       
        }

$(document).ready(function() {
        populateFruitVariety();
    $('#ville').change(function() {
        populateFruitVariety();
    });});
</script>


mais le problème comme je peux récupéré la résultat de mon quartierAction ($row) :<

Hors ligne

 

#7 20-04-2012 11:58:41

tahaaa
Membre
Date d'inscription: 17-04-2012
Messages: 14

Re: Remplir en getJSON un element SELECT automatiquement

ca fait 2 jour que je suis bloque dans cette parité aidee moi SVP

Hors ligne

 

#8 20-04-2012 12:04:12

shadypierre
Membre
Date d'inscription: 24-03-2010
Messages: 617

Re: Remplir en getJSON un element SELECT automatiquement

Soit patient nous sommes nous aussi occupé par notre propre travail!

Avec firebug ou la console chrome (ou autre) l'appel ajax s'effectue bien ?
Tu as une erreur retourné dans la console JS ?
As tu essayé d'aller directement sur l'url censé retourner les quartiers pour vérifier que tu as bien du json d'affiché?

Hors ligne

 

#9 20-04-2012 12:44:16

tahaaa
Membre
Date d'inscription: 17-04-2012
Messages: 14

Re: Remplir en getJSON un element SELECT automatiquement

je suis patient mais je doit présente le projet se lundi c pour ca et j ai un retard de 3 jour a cause de cette partie je suis desole. pour le code

j ai fait apple directement action ca fonction tres bien il a bien affiche les quartier mais pour passe le tb des quartier de l action vers le vu l ajax il m afficher rien 
success: function(data)
                        {               
                                       $.each(data, function(index, array) {
                    options[options.length] = new Option(array['quartier']);
                    alert(options[options.length]);
                });}

Hors ligne

 

#10 20-04-2012 13:05:27

tahaaa
Membre
Date d'inscription: 17-04-2012
Messages: 14

Re: Remplir en getJSON un element SELECT automatiquement

j ai ajouter cette declaration Action:

public function init()
    {
        $ajaxContext = $this->_helper->getHelper('ajaxContext');
        $ajaxContext->addActionContext('quartier','json')
                      ->initContext();
}


phtml:

success: function(data)
                        {               
                                       alert(data);

              }

et la c affiche : [object Object] ??

Dernière modification par tahaaa (20-04-2012 13:15:29)

Hors ligne

 

#11 20-04-2012 13:38:14

shadypierre
Membre
Date d'inscription: 24-03-2010
Messages: 617

Re: Remplir en getJSON un element SELECT automatiquement

Uilise plutot le 'contextSwitch'

Code:

    public function preDispatch()
    {
        $contextSwitch = $this->_helper->getHelper('contextSwitch');
        $contextSwitch->addActionContext('quartier', 'json')
                ->initContext();
    }

Ensuite dans ta vue un truc dans le genre

Code:

$(document).ready(function()
{
    $("#ville").change(function()
    {
        window.ville = $("#ville option:selected").val();

        $.post("/controller/quartier/format/json",{
                ville : window.ville
            }, function(result){
                $.each(data, function(index, array) {
                    options[options.length] = new Option(array['quartier']);
                    alert(options[options.length]);
                });
                
        }); 
    });
    
    $('#ville').trigger('change');
});
</script>

Dernière modification par shadypierre (20-04-2012 13:38:34)

Hors ligne

 

#12 20-04-2012 14:10:23

tahaaa
Membre
Date d'inscription: 17-04-2012
Messages: 14

Re: Remplir en getJSON un element SELECT automatiquement

j ai utile exactement se que vous m'avez donnez

   

Indexcontrole.php a écrit:

public function init(){
   
    $this->view->addHelperPath( 'ZendX/JQuery/Helper', 'ZendX_JQuery_View_Helper');
    $this->view->addHelperPath('Zend/Dojo/View/Helper/', 'Zend_Dojo_View_Helper');
                            
        $contextSwitch = $this->_helper->getHelper('contextSwitch');
        $contextSwitch->addActionContext('quartier', 'json')
                ->initContext();
       
    }

public function quartierAction(){
               
            $id = $this->_request->getParam('id');
            $q = Doctrine_Query::create()
                             ->select('QUARTIER')
                             ->from('App_Models_Quartier q')
                             ->where('q.ID_VILLE = ?', $id);
                              $rows = $q->execute();

       
                                                          $this->view->rows = $rows;
}

Ensuite dans ma vue:

AjouteBien.phtml a écrit:

<script>
$(document).ready(function()
{
    $("#ville").change(function()
    {
        window.ville = $("#ville option:selected").val();
     
        $.post("getville/format/json",{
                ville : window.ville
            }, function(result){
                  alert (result);
                $.each(result, function(index, array) {
                    options[options.length] = new Option(array['quartier']);
                    alert(options[options.length]);
                });
               
        });
    });
   
    $('#ville').trigger('change');
});
</script>

mais il m affiche toujours [object Object] comme resultas de mon alert (result);

Dernière modification par tahaaa (20-04-2012 14:14:09)

Hors ligne

 

#13 20-04-2012 14:50:42

shadypierre
Membre
Date d'inscription: 24-03-2010
Messages: 617

Re: Remplir en getJSON un element SELECT automatiquement

Ça me semble logique puisque tu retourne du json

Hors ligne

 

#14 20-04-2012 16:34:23

tahaaa
Membre
Date d'inscription: 17-04-2012
Messages: 14

Re: Remplir en getJSON un element SELECT automatiquement

alors c'est quoi la solution SVP pour qu il m affiche les quartiers smile

Hors ligne

 

#15 20-04-2012 19:10:00

tahaaa
Membre
Date d'inscription: 17-04-2012
Messages: 14

Re: Remplir en getJSON un element SELECT automatiquement

est ce que je utilse json_encode($users); pour decode le json ????

Hors ligne

 

#16 23-04-2012 12:34:12

tahaaa
Membre
Date d'inscription: 17-04-2012
Messages: 14

Re: Remplir en getJSON un element SELECT automatiquement

est ce que si possible que vous me donne ton code JavaScript pour que vous afficher la résultats de Json sur votre page vu phtml merci

Dernière modification par tahaaa (23-04-2012 12:34:40)

Hors ligne

 

#17 23-04-2012 18:54:53

tahaaa
Membre
Date d'inscription: 17-04-2012
Messages: 14

Re: Remplir en getJSON un element SELECT automatiquement

j ai trouvez la solution lol smile) smile) smile)

Hors ligne

 

#18 24-04-2012 11:37:51

shadypierre
Membre
Date d'inscription: 24-03-2010
Messages: 617

Re: Remplir en getJSON un element SELECT automatiquement

ça pourrait surement servir à d'autre si tu pouvais nous expliquer qu'elle était finalement le problème.

Hors ligne

 

#19 30-05-2012 17:21:28

bernard899
Membre
Date d'inscription: 29-05-2012
Messages: 19

Re: Remplir en getJSON un element SELECT automatiquement

pouvez vous  nous donner la solution finale , j'ai le même problème , pouvez vous nous donnez la solution final ? merci

Hors ligne

 

#20 03-06-2012 18:56:25

croux89
Membre
Date d'inscription: 20-04-2012
Messages: 72

Re: Remplir en getJSON un element SELECT automatiquement

s'il vous plait c'est quoi la solution final parce que j'ai suivi se tutorial depuis le début jusqu'à la fin et j'ai pas eu le résultat voulu , j'ai toujours le message alert avec ({quartier:{});

Dernière modification par croux89 (03-06-2012 20:06:08)

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages