[Résolu] Mise A Jour D'un Listdata Via Dropdownlist Et Ajax

Bonjour,

J’ai intégré le sujet suivant http://www.yiiframework.com/wiki/24/creating-a-dependent-dropdown/

ça fonctionne super bien, sauf que je voulais rajouter une valeur "empty" à la liste Country.

Quand je clique sur l’un des élèments de la liste “Country” ça marche, il filtre bien, car contre dès que je clique sur le champ empty "Select country) il donne pas la liste entiere de “city” et je vois une erreur 500.

Votre aide svp.

Merci




$country=CHtml::listData(Country::model()->findAll(), 'country_id', 'name');

echo $form->dropdownlist($model,'country_id',$country,array('empty'=>'Select country',

	'ajax'=>array(

	'type'=>'POST',

	'url'=>CController::createUrl('country/test'),

	'update'=>'#Country_city_id',

	'data'=>array('country_id'=>'js:this.value'),

	),

	));


echo $form->dropDownList(

	$model,                    

	'city_id', 

	CHtml::listData(City::model()->findAll(), 'city_id', 'name'),

	array('empty'=>'Select city','style'=>'width:125px;'));



d’après le tuto place une array vide dans la 2ième Droplist CHtml::dropDownList(‘city_id’,’’, array());

puis effectivement il faut editer le controlleur ‘actionTest’ et rajoute une condition d’éxécution car il va planter lorsque la valeur de country_id est nulle…

if $_POST[‘country_id’] {

( 1 -je met à jour l'objet 'city_id')

$data=Location::model()->findAll(‘parent_id=:parent_id’,

              array(':parent_id'=>(int) $_POST['country_id']));





$data=CHtml::listData($data,'id','name');


 (2 -je rajoute une valeur 'empty' avant update de la droplist)


echo CHtml::tag('option',


               array('value'=>'empty'),'',true);

foreach($data as $value=>$name)

{


    echo CHtml::tag('option',


               array('value'=>$value),CHtml::encode($name),true);


}

}

après il y a peut être une autre astuce…

Merci infiniment.

j’avais fais une erreur


findAll('country_id=:parent_id');



au lieu de


findAll();



ça marche nickel, Merci