Bonjour, alors voilà, suite au tuto de grafikart sur "lier plusieurs selects", j'ai cherché comment l'adapter a CakePhp, et j'ai presque trouvé. cependant, il subsiste un problème, mais la est lier au javascript. J'arrive a récupérer les données, par contre au moment de créer les options du second sélect, j'ai "undefined" pour tous les choix. pourtant, quand je fais un console.log(data.results*); , il me trouve bien les regions avec les id. parcontre, un console.log(target.options*); retourne ceci: [code]<option value="undefined">undefined</option>[/code] [img]http://riding-zone.sainter-city.fr/img/Capture.png[/img] voici la partie Js: [code](function($){ $('.ajaxList').change(function(event){ var select = $(this); var id = '#'+select.data('target'); $.get(select.data('url'), {id:select.val()}, function(data){ if(data.error){ alert(data.error); }else{ $(id).parents('.control-group').show(); var target = $(id).get(0); target.options.length = 0; for(var i in data.results){ var result = data.results*; console.log(data.results*); target.options* = new Option(result.name, result.id, false, false); console.log(target.options*); } } },'json'); }).each(function(){ var select = $(this); var target = $('#'+select.data('target')); target.parents('.control-group').hide(); }); })(jQuery); [/code] voici ma function dans mon contrôler : [code] public function region() { if(isset($_GET['id'])){ $this->loadModel('Region'); $list = $this->Region->find('all',array('fields' => array('Region.id', 'Region.name'))); if($_GET['id'] == 67){ $regions = array( 'error' => false, 'results' => $list ); }else{ $regions = array('error' => "Il n'existe pas de région pour la pays sélectionné"); } }else{ $regions = array('error' => "Vous n'avez pas sélectionné de région"); } die(json_encode($regions)); } [/code] et ma vue: [code] <?php $region_id = 0;
if(isset($_POST['region_id'])){
$region_id = $_POST['region_id'];
}
?>
<label class="control-label" for="select01">Pays</label>
<select id="SpotCountryId" name="data[Spot][country]" class="ajaxList" data-url="<?= $this->Html->url( array( 'controller' => 'spots', 'action' => 'region'));?>" data-target="SpotRegionId">
<?php foreach ( $countries as $country ): ?>
<option value="<?= $country['Country']['id']; ?>" selected :>>
= $country['Country']['name']; ?>
</option>
<?php endforeach ?>
</select>
<label class="control-label" for="select01">Région</label>
<select id="SpotRegionId" name="data[Spot][region_id]" class="ajaxList" data-url="<?= $this->Html->url( array( 'controller' => 'spots', 'action' => 'departement'));?>" data-target="SpotDepartementId">
<option value="0">Vous devez sélectionner une région</option>
</select>
<label class="control-label" for="select01">Département</label>
<select id="SpotDepartementId" name="data[Spot][departement_id]">
<option value="0">Vous devez sélectionner un département</option>
</select>
[/code] si quelqu'un a une idée je suis preneuse la ;) merci d'avance. PS: j'ai aussi essayé avec les code de cakephp pour le inputs, mais pareil. [code]<?php echo $this->Form->input('country_id',array('label'=>'Pays', 'empty' => 'Séléctionner ...', 'data-target'=>'SpotRegionId', 'data-url' => $this->Html->url( array( 'controller' => 'spots', 'action' => 'region')), 'class'=>"ajaxList") );?><?php echo $this->Form->input('region_id', array('label'=>'Région', 'empty' => 'Séléctionner ...','options' => array(), 'data-target'=>'SpotDepartementId', 'data-url' => $this->Html->url( array( 'controller' => 'spots', 'action' => 'departement')), 'class'=>"ajaxList") );?><?php echo $this->Form->input('departement_id', array('label'=>'Département','empty' => 'Séléctionner ...','options' => array()));?> [/code]
Résolu grace au IRC du site ;) remplacement de [code]target.options* = new Option(result.name, result.id, false, false);[/code] par [code]target.options* = new Option(result.Region.name, result.Region.id, false, false);[/code] pour les région, et ensuite je duplique la function Ajax pour les autre liste. un grand merci a Damocorp sur l'irc pour son aide ;)