Dependent Dropdown

Ciao a tutti,

avrei bisogno di un aiuto.

Ho creato 2 dropdown menu dipendenti che rappresentano il primo la "marca" il secondo il "modello" relativo alla marca selezionata.

ho seguito il wiki http://www.yiiframework.com/wiki/24/ dal titolo "Creating a dependent dropdown".

il primo menù "marca" preleva i dati dalla tabella "marca" mentre il menù "modello" preleva i dati dalla tabella "modello". le due tabelle sono in relazione 1-N attraverso la chiave id_marca nella tabella modello

marca

id|desc

modello

id|id_marca|desc

desc è il campo che indica il nome della marca o del modello

L’implementazione dell’esempio funziona correttamente, ma la mia esigenza è anche quella di recuperare i valori selezionati dei due dropdown menu’ essendo essi inseriti all’interno di un form.

Perciò ho inserito nella variabile $marca i dati della tabella marca e poi passati al $form->dropDownList…

mentre con il dropdown dipendente "modello" non sò come fare.

come posso fare per cambiare:

echo CHtml::dropDownList(‘desc’,‘modello’, array(), array(‘prompt’=>‘Seleziona Modello’));

i modo da poter recuperare la selezione con $form->dropDownList($model,…)

Sotto il codice

Grazie

La view:

$marca = CHtml::listData(Marca::model()->findAll(array(‘order’ => ‘id’)), ‘id’, ‘desc’);

			 echo $form->dropDownList($model,'marca', $marca,


                             array(


			    'prompt'=>'Seleziona Marca',


			    'ajax' => array(


			    'type'=>'POST', 


			    'url'=>CController::createUrl('LoadModello'),


			    'update'=>'#desc', 


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


			 )));








         echo $form->labelEx($model,'modello');


         echo CHtml::dropDownList('desc','modello', array(), array('prompt'=>'Seleziona  Modello'));			

Il Controller

public function actionLoadModello()


{


        $data=Modello::model()->findAll('id_marca=:id_marca', array(':id_marca'=>(int) $_POST['id_marca']));


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


         


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


    {


	echo CHtml::tag('option', array('value'=>$value),CHtml::encode($desc),true);


    }      


}//

il secondo dropdown devi legarlo al model come per gli altri campi.

non così




echo $form->labelEx($model,'modello');

echo CHtml::dropDownList('desc','modello', array(), array('prompt'=>'Seleziona Modello'));



ma così:




echo $form->labelEx($model,'modello');

echo CHtml::dropDownList($model,'modello', array(), array('prompt'=>'Seleziona Modello'));



Ho già provato nel modo consigliato da te ma se non gli passo come primo argomento del secondo dropdown il campo “desc” (dropDownList(‘desc’,‘modello’, array(), array(‘prompt’=>‘Seleziona Modello’));) non mi riempie la lista di selezione dei modelli

Probabilmente cambiano gli id delle ddl e devi modificare il js di conseguenza

Come devo fare e dove lo trovo il codice js ?

correggi questo:




echo $form->dropDownList($model,'marca', $marca,

array(

'prompt'=>'Seleziona Marca',

'ajax' => array(

'type'=>'POST', 

'url'=>CController::createUrl('LoadModello'),

'update'=>'#desc',  <-- Questo qui è il tuo problema

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

)));



o aggiungi alla tua seconda dropdown:




echo CHtml::dropDownList($model,'modello', array(), array('prompt'=>'Seleziona Modello','id'=>'desc'));



oppure cambi




'update'=>'#Model_modello'



Ora funziona correttamente. Grazie per l’aiuto. Molto gentili