Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 10-08-2012 17:00:40

stevouwill
Nouveau membre
Date d'inscription: 12-05-2012
Messages: 4

liste liees MultiOptions avec ajax

Bonjour, une fois de plus je m'excuse de revenir une fois de plus sur ce sujet déjà rencontré dans presque  plusieurs forums mais vraiment sans reponse satisfaisant.En effet je dispose d'un formulaire devant permettre de creer des circonscriptions en fonction du pays de la region du departement et de l'arrondissement (PAYS->REGION->DEPARTEMENT->ARRONDISSEMENT->nom_circonscription) pour cela j'ai envie d'utiliser ajax et d'apres http://www.developpez.net/forums/d95031 … ste-liees/  j'ai pu réaliser mon models mais je ne sais pas pourquoi cela ne fonctionne pas
    voici mon code model pays
   

Code:

<?php

class Application_Model_DbTable_Pays extends Zend_Db_Table_Abstract
{

    protected $_name = 'pays';

    public function selectData() {
 
        $select = $this->select();
        return $this->fetchAll($select);
 
    }//Eof:: selectData
    
}

voici mon code model region

Code:

<?php

class Application_Model_DbTable_Region extends Zend_Db_Table_Abstract
{

    protected $_name = 'region';
        
    public function selectData() {
 
        $select = $this->select();
        return $this->fetchAll($select);
 
    }//Eof:: selectData

}

voici mon code model departement

Code:

<?php

class Application_Model_DbTable_Departement extends Zend_Db_Table_Abstract
{

    protected $_name = 'departement';
    
    public function selectData() {
 
        $select = $this->select();
        return $this->fetchAll($select);
 
    }//Eof:: selectData

}

voici mon code model arrondissement

Code:

<?php

class Application_Model_DbTable_Arrondissement extends Zend_Db_Table_Abstract
{

    protected $_name = 'arrondissement';
    
    public function selectData() {
 
        $select = $this->select();
        return $this->fetchAll($select);
 
    }//Eof:: selectData

    
    public function selectRecherche($critere) {
 
        $sql = "SELECT
  `pays`.`idpays`, `pays`.`nom_pays`,`region`.`idregion`,  `region`.`nom_region`, `departement`.`iddepartement`,`departement`.`nom_departement`,`arrondissement`.`idarrondissement`, `arrondissement`.`nom_arrondissement`
FROM
  `pays` INNER JOIN
  `region` ON `pays`.`idpays` = `region`.`pays_idpays` INNER JOIN
  `departement` ON `region`.`idregion` = `departement`.`region_idregion`
  INNER JOIN
  `arrondissement` ON `departement`.`iddepartement` =
    `arrondissement`.`departement_iddepartement`
                ";
 
        // Continent
        if (!$critere['idpays'] == "") {
            $sql .= " AND `pays`.`idpays` = ".$critere['idpays'];
        }
 
        // Pays
        if (!$critere['idregion'] == "") {
            $sql .= " AND `region`.`idregion` = ".$critere['idregion'];
        }
 
        // Ville
        if (!$critere['iddepartement'] == "") {
            $sql .= " AND `departement`.`iddepartement` = ".$critere['iddepartement'];
        }
        
        if (!$critere['idarrondissement'] == "") {
            $sql .= " AND `arrondissement`.`idarrondissement` = ".$critere['idarrondissement'];
        }
 
 
        return $this->getAdapter('db')->fetchAll($sql);        
 
    }//Eof:: selectRecherche

}

voici mon formulaire

Code:

<?php

class Application_Form_Circonscription extends Zend_Form
{    
    public function __construct($options = null) {
 
        parent::__construct($options);
 
              /* Le Formulaire */
              $this->addAttribs( array( 'id' => 'circonscription')); 
 
               /* Bouton Reset */
              $reset = new Zend_Form_Element_Button('reset');
              $reset ->setLabel('reset');        
 
 
        // Liste des pays
        $id_pays = new Zend_Form_Element_Select('idpays');
        $id_pays->setLabel ('Pays')
                    ->addMultiOptions($this->listPays())    
                    ;
 
        // Liste des regions
        $id_region = new Zend_Form_Element_Select('idregion');
        $id_region->setLabel ('Region')
                ->addMultiOptions($this->listRegion())    
                ;
 
        // Liste des departements
        $id_departement = new Zend_Form_Element_Select('iddepartement');
        $id_departement->setLabel ('Departement')
                ->addMultiOptions($this->listDepartement())    
                ;
        // Liste des arrondissements
        $id_arrondissement = new Zend_Form_Element_Select('idarrondissement');
        $id_arrondissement->setLabel ('Arrondissement')
                ->addMultiOptions($this->listArrondissement())    
                ;
 
                /* Element bouton de validation */
        $submit = new Zend_Form_Element_Submit('submit');
                $submit ->setAttrib('id', 'submitbutton')
                           ->setLabel('Chercher')
                             ;
        $nom = new Zend_Form_Element_Text('circonscription');
        $nom ->setLabel('circonscription')
        ->setRequired(true)
        ->addFilter('StripTags')
        ->addFilter('StringTrim')
        ->addValidator('NotEmpty');
 
 
         $this->addElements(array(   $reset
                           , $id_pays
                           , $id_region
                           , $id_departement
                          , $id_arrondissement
                          , $nom
                                             , $submit
                                  ));
 
    } //Eof:: __construct
 
 
 
    /**
     * Liste des pays
     */
    private function listPays() {
 
        $TContinents = new Application_Model_DbTable_Pays();
        $Continents = $TContinents->selectData();
 
        $listPays = array();
        $listPays[""] = "-- Choisissez --"; 
        foreach ($Continents as $Continent) {
               $listPays[$Continent->idpays] = $Continent->nom_pays;            
        }
 
        return $listPays;
 
    }//Eof:: listContinent
 
 
    /**
     * Liste des regions
     */
    private function listRegion() {
 
        $TPays = new Application_Model_DbTable_Region();
        $region = $TPays->selectData();
 
        $listRegion = array();
        $listRegion[""] = "-- Choisissez --"; 
        foreach ($region as $pays) {
               $listRegion[$pays->idregion] = $pays->nom_region;            
        }
 
        return $listRegion;
 
    }//Eof:: listPays
 
 
   /**
     * Liste des departement
     */
    private function listDepartement() {
 
        $TVilles = new Application_Model_DbTable_Departement();
        $departement = $TVilles->selectData();
 
        $listDepartement = array();
        $listDepartement[""] = "-- Choisissez --"; 
        foreach ($departement as $Ville) {
               $listDepartement[$Ville->iddepartement] = $Ville->nom_departement;            
        }
 
        return $listDepartement;
 
    }//Eof:: listVille

   /**
     * Liste des arrondissements
     */
 
 private function listArrondissement() {
 
        $TVilles = new Application_Model_DbTable_Arrondissement();
        $arrondissement = $TVilles->selectData();
 
        $listArrondissement= array();
        $listArrondissement[""] = "-- Choisissez --"; 
        foreach ($arrondissement as $Ville) {
               $listArrondissement[$Ville->idarrondissement] = $Ville->nom_arrondissement;            
        }
 
        return $listArrondissement;
 
    }//Eof:: listVille

}

voici mon controlleur ajax

Code:

<?php

class Admin_AjaxController extends Zend_Controller_Action
{

    public function init()
    {
        /* Initialize action controller here */
        $this->view->addHelperPath('ZendX/JQuery/View/Helper/', 'ZendX_JQuery_View_Helper');
         if($this->_request->isXmlHttpRequest()){
           $this->_helper->layout->disableLayout();
               $this->_helper->viewRenderer->setNoRender(true);
               $this->_helper->viewRenderer->setNeverRender(true);
        }
    }

    public function indexAction()
    {
        // action body
    }

    public function remplirAction()
    {
        // action body
         
            // Récupération des paramètres passés dans la requête
            $params = $this->_request->getParams();
 
            // Appel de mon modèle de table
            $TVilles = new Application_Model_DbTable_Arrondissement();
            // Extraction selon les critère de recherche des différents paramètres
            $Rows = $TVilles->selectRecherche($params);
 
             // Transforme mes données en tableau PHP 
            $list = array();
            foreach ($Rows as $row) {
                $list ['pays'][$row->idpays] = $row->nom_pays;
                $list ['region'][$row->idregion]  = $row->nom_region;
                $list ['departement'][$row->iddepartement] = $row->nom_departement;
                $list ['arrondissement'][$row->idarrondissement] = $row->nom_arrondissement;
            }
 
            // Je renvoie ce tableau à ma vue au format JSON
            $this->_helper->json($list
                                  , array(
                                            'enableJsonExprFinder' => true
                                          ));
 
    }//Eof:: remplirAction
    
}

voici mon controlleur circonscription

Code:

<?php

class Admin_CirconscriptionController extends Zend_Controller_Action
{

    public function init()
    {
        /* Initialize action controller here */
        $this->view->addHelperPath('ZendX/JQuery/View/Helper/', 'ZendX_JQuery_View_Helper');
    }

    public function indexAction()
    {    
        
    }

    public function ajouterAction()
    {
    
    $Form = new Application_Form_Circonscription();
 
        // Assignation de mes éléments à ma vue
        $this->view->form = $Form;
    }


}

voici mon fichier javascript situé dans /public/js/custom.custom.js

Code:

/**
 
    
*/
 
//Remplir les select du formulaire en fonction de la réponse AJAX
function remplirSelect (dataAjax) {
 
    // Envoi requête AJAX       
    $.ajax({
         type: "POST"
       , url: "../ajax/remplir" // controller : ajax , action : remplir
       , data : dataAjax
       , dataType: "json"
       , success: function(reponse){
 
       // Sur Succès de la réponse AJAX
 
       // Duplique ma réponse    
          var optionData = reponse;
 
        // Suppression des éléments de mes listes déroulantes
       $("#idpays > option").remove();
       $("#idregion > option").remove();
       $("#iddepartement> option").remove();
       $("#idarrondissement> option").remove();
 
       // Ajoute les options pour chaque liste déroulante en fonction de la réponse
       // Mes Continents    
       i = 0;           
       for (key in reponse.Pays) {    
        $("#idpays").append(  '<option label="' 
                                          + optionData['Pays'][key]
                                               + '"'
                                               + 'value="'
                              + key
                              + '">'
                              + optionData['Pays'][key]
                              + '</option>');
        i++;
        if (i == 2) { 
                $("#idpays:first").prepend( '<option label="Choisissez" value="" >-- Choississez --</option>');
                $("#idpays option:first").attr ('selected', 'selected');
                }
        } //Eof:: for 'pays'
 
         // Mes Pays    
         i = 0;           
        for (key in reponse.Region) {    
            $("#idregion").append(  '<option label="' 
                                          + optionData['Region'][key]
                                               + '"'
                                               + 'value="'
                              + key
                              + '">'
                              + optionData['Region'][key]
                              + '</option>');
            i++;
            if (i == 2) { 
                    $("#idregion:first").prepend( '<option label="Choisissez" value="" >-- Choississez --</option>');
                    $("#idregion option:first").attr ('selected', 'selected');
                    }
        } //Eof:: for 'region'
 
         // Mes departements    
         i = 0;           
        for (key in reponse.Departement) {    
           $("#iddepartement").append(  '<option label="' 
                                          + optionData['Departement'][key]
                                               + '"'
                                               + 'value="'
                              + key
                              + '">'
                              + optionData['Departement'][key]
                              + '</option>');
            i++;
            if (i == 2) { 
                $("#iddepartement:first").prepend( '<option abel="Choisissez" value="" >-- Choississez --</option>');
                $("#iddepartement option:first").attr ('selected', 'selected');
                    }
        } //Eof:: for 'Departement'
 
 
 // Mes departements    
         i = 0;           
        for (key in reponse.Arrondissement) {    
           $("#idarrondissement").append(  '<option label="' 
                                          + optionData['Arrondissement'][key]
                                               + '"'
                                               + 'value="'
                              + key
                              + '">'
                              + optionData['Arrondissement'][key]
                              + '</option>');
            i++;
            if (i == 2) { 
                $("#idarrondissement:first").prepend( '<option abel="Choisissez" value="" >-- Choississez --</option>');
                $("#idarrondissement option:first").attr ('selected', 'selected');
                    }
        } //Eof:: for 'Arrondissement'
 
 
        } //Eof:: success
    });  //Eof:: ajax 
 
} //Eof:: fucntion remplirSelect
 
 
 
//Sur fin du chargement du document
$(document).ready( function() {
 
    // Sur changement de l'un des 'select'
    $("select").change(function(){
 
        // Je recupère la valeur des sélections en cours
         Vid_pays = $("select#idpays").val();
         Vid_region = $("select#idregion").val();
         Vid_departement = $("select#iddepartement").val();
        Vid_arrondissement = $("select#idarrondissement").val();
 
         // Données à passer à la requête AJAX
         var dataAjax = {  idpays:[Vid_pays]
                         , idregion:[Vid_region]
                         , iddepartement:[Vid_departement]
                        , idarrondissement:[Vid_arrondissement]
                      };
 
        // Modification des 'select'
        remplirSelect (dataAjax);
 
    }); //Eof:: sur changement de l'un des 'select'

 
    // Sur click bouton reset
    $("#reset").click (function() {
 alert("bonjour bao");
        // Aucun choix
         Vid_pays = "";
         Vid_region = "";
         Vid_departement = "";
        Vid_arrondissement = "";
 
         // Données à passer à la requête AJAX
         var dataAjax = {  idpays:[Vid_pays]
                         , idregion:[Vid_region]
                         , iddepartement:[Vid_departement]
                        , idarrondissement:[Vid_arrondissement]
                      };
 
        // Modification des 'select'
        remplirSelect (dataAjax);
 
    }); //Eof:: sur click btn 'reset'
 
 
}); //Eof:: ready

voici mon layout comprend la ligne suivante

Code:

<?php $this->headScript()->appendFile('/js/custom/custom.js'); ?>

mais malgres tout ceci rien ne marche s'il vous plais aidez moi à voir ce qui ne vas pas dans mes codes

Dernière modification par stevouwill (18-08-2012 20:21:42)

Hors ligne

 

#2 18-08-2012 20:02:39

stevouwill
Nouveau membre
Date d'inscription: 12-05-2012
Messages: 4

Re: liste liees MultiOptions avec ajax

s'il vous plais j'aimerais savoir en fait comment faire pour activer javascript pour ma vue parce que je me rend compte  que le javascript ne fonctionne pas

Hors ligne

 

#3 22-09-2012 14:19:28

Ykorio
Nouveau membre
Date d'inscription: 10-04-2012
Messages: 2

Re: liste liees MultiOptions avec ajax

Bonjour,

As-tu dans ton layout cette ligne :

Code:

[lang=php]echo $this->headScript() . PHP_EOL;

Dernière modification par Ykorio (22-09-2012 14:20:59)

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