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


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
Auteur

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

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
Auteur

Merci Jeremy je vais essayer ta proposition :)

twita
Auteur

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
                ))
            ))
        );

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

twita
Auteur

ok Merci

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

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