chager deux listes dépendance Cakephp

Par twita, il y a 11 ans


Bonjour a tous ,
je suis débutante sur cakephp , je suis entrain de developper une application de gestion de delegués médicaux donc quand je veux ajouter un medecin je dois remplir un formulaire dont j'aimerais afficher deux listes une des régions et une autre des villes. la liste de la ville doit afficher juste les villes de la région sélectionnée .

j'ai beau chercher sur internet mais je ne trouve pas qqc de claire car je suis coincée :/

Merci pour votre aide .

9 réponses

Jeremy C, il y a 11 ans

Bonjour twita,

essaye l'ajax pour faire appel à ta base de données :

  • avec une table qui contiendrai les régions
  • une autre qui aurait les villes et qui possèderait en foreign_key le référence vers l'id d'une région.

Moi c'est comme cela que j'aurai fait ;)

twita, il y a 11 ans

justement j'ai pas su cmment faire appel a ajax pck je travaille avec Cakephp.
j'ai 3 model
regions(id, nom)
villes(id, nom,regions_id)
medecins(id,nom,villes_id)

peux tu m’éclaircir encore plus

Jeremy C, il y a 11 ans

oui pas de problème :

  • dans ta vue tu fait une fonction javascript que tu va appeler à chaque changement de ton premier select.
    par exemple :

    function getVilles()
    {
    var myselect = document.getElementById("id_select_region");

        var id_region = myselect.options[myselect.selectedIndex].value;
    
        <?php
         $url = $this->Html->url(array("action" => "mafonctionControllerGetVilles"),true);
        ?>
    
        $.ajax({
          type: 'POST', // Le type de ma requete
          url: <?php echo '"'.$url.'"' ;?>, // L'url vers laquelle la requete sera envoyee
          data: {
            id: id_region, // Les donnees que l'on souhaite envoyer au serveur au format JSON
          }, 
          success: function(data, textStatus, jqXHR) 
          {
    
                //ici tu fait ce que tu veux avec les donnée
    
          },
          error: function(jqXHR, textStatus, errorThrown) 
          {
            console.log('ERROR on mafonctionControllerGetVilles');
          }
        });
  • dans ton controller :

    public function mafonctionControllerGetVilles()
    {
    $id_region = htmlspecialchars($_POST'id_region']);

        //tu fait ta requete pour recupere les villes de la regions
        $result = $this->villes->find('all', array(
                    'conditions' => array('region_id' => $id_region ,
                                )
                                          ));
        //tu traite ton resultat
                echo json_encode($result);
                //ne pas oublier le exit pour eviter que cake ne prenne la main et renvoie une erreur
        exit();
    }

Je ne dit pas que c'est comme cela que l'on doit faire exactement mais c'est comme cela que je fait en général et cela fonctionne tres bien ;)
Tu as plus grand chose a faire à par adapter le code pour ton usage personnel ;)

J'espère que je t'ai bien aider ;)

Cordialement ,

Jeremy

twita, il y a 11 ans

Merci Jeremy je vais essayer ta proposition :)

twita, il y a 11 ans

jai une confusion pour la fonction getVilles je la met dans ma vue add.ctp?? aussi pour les input j'ai trouvé sur net qqc comme ca :

?>

echo $this->Form->input('regions_id',array($regions, 'empty' => 'choisir', 'onchange' =>'change(this.select)'));
echo $this->Form->input('villes_id' ,array('clas' => 'loader' ,'stypr' => 'display:hidden'));
$this->Js->get('#MedecineRegionId')->event('change', 
        $this->Js->request(array('controller'=>'villes','action'=>'getRegions'), 
            array(
            'update'=>'#MedecineRegionId',
            'async' => true,
            'method' => 'post',
            'dataExpression'=>true,
            'data'=> $this->Js->serializeForm(array(
                'isForm' => true,
                'inline' => true
                ))
            ))
        );
Jeremy C, il y a 11 ans

oui la fonction getVilles tu la met dans ta vue qui va appelé donc en ajax ton controller :)

twita, il y a 11 ans

ok Merci

Jeremy C, il y a 11 ans

de rien :) tient moi au courant si cela fonctionne :)

uknowcreation, il y a 11 ans

bonjour à tous j'ai à peu pres le meme probleme ou je dois calculer des subventions, sachant que pour moi j'ai une table villes region et departements avec une value dans chacune des tables.
Pour eviter de faire une requete avec un find all de toutes mes villes qui est beaucoup trop lourde (36 000 villes) je souhaite utiliser ce systeme dans mon formulaire pour ainsi selon la region il me selectionne les departements associé et seleon le departements les villes.
mais voilà j'avoue je suis également débutant et cela fait 4 jours que je me prend la tete la dessus .
Si vous pouvez m'aiguiller Merci à vous