Salve!,
sono nuovo nel forum e un principiante con Yii. Sto provando a fare il mio primo progetto di prova, e mi sono scontrato con un problema per me ostico…
Ho una form con tre dropdownlist dipendenti tra loro. In fase di inserimento la prima dropdownlist è già popolata, mentre le altre due si popolano tramite selezione della precedente.
Tutto ok se vado in sequenza, la prima aggiorna la seconda, la seconda aggiorna la terza.
Il problema è che se dopo avere completatao la selezione nelle tre dropdownlist, una variazione nella prima si riflette solo sulla seconda, mentra la terza resta invariata con la selezione precedente, in pratica vorrei che:
-
venga popolata con gli elementi che si riferiscono all’opzione della seconda;
-
oppure venga azzerata, quindi senza elementi, che quindi verranno presi operando una selezione nella seconda.
Spero di non essere stato troppo prolisso e confusionario.
questo è il codice presente nella view:
<div class="row">
<?php echo $form->labelEx($model,'id_ufficio_liv2'); ?>
<?php //echo $form->textField($model,'id_ufficio_liv2'); ?>
<?php echo $form->dropDownList($model,
'id_ufficio_liv2',
Ufficio2liv::model()->getElencoUffici2Livello(),
array(
'prompt' => 'Seleziona Ufficio',
'ajax' => array(
'type'=>'POST', //request type
'url'=>CController::createUrl('utente/popolaUffici3Liv'), //url to call.
//Style: CController::createUrl('currentController/methodToCall')
'update'=>'#'.CHtml::activeId($model,'id_ufficio_liv3'),
//'data'=>'js:javascript statement'
//leave out the data key to pass all form values through
))); ?>
<?php echo $form->error($model,'id_ufficio_liv2'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'id_ufficio_liv3'); ?>
<?php //echo $form->textField($model,'id_ufficio_liv3'); ?>
<?php echo $form->dropDownList($model,
'id_ufficio_liv3',
$model->isNewRecord ? array() : Ufficio3liv::model()->getElencoUffici3Livello($idUff2Livello),
array(
'prompt' => 'Seleziona Ufficio',
'ajax' => array(
'type'=>'POST', //request type
'url'=>CController::createUrl('utente/popolaUffici4Liv'), //url to call.
//Style: CController::createUrl('currentController/methodToCall')
'update'=>'#'.CHtml::activeId($model,'id_ufficio_liv4'),
//'data'=>'js:javascript statement'
//leave out the data key to pass all form values through
))); ?>
<?php echo $form->error($model,'id_ufficio_liv3'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'id_ufficio_liv4'); ?>
<?php //echo $form->textField($model,'id_ufficio_liv4'); ?>
<?php echo $form->dropDownList($model,'id_ufficio_liv4',
$model->isNewRecord ? array() : Ufficio4liv::model()->getElencoUffici4Livello($idUff3Livello),
array('prompt' => 'Seleziona Ufficio'));
?>
<?php echo $form->error($model,'id_ufficio_liv4'); ?>
</div>
mentre questo è il codice nel controller:
/**
* Carica gli uffici di 3°livello nella dopdownlist.
*/
public function actionPopolaUffici3Liv()
{
$criteria = new CDbCriteria;
$criteria->order = 'nomeufficio ASC';
$criteria->condition = 'id_ufficio_2liv=:id';
$criteria->params[':id'] = (int) $_POST['Utente']['id_ufficio_liv2'];
$data=Ufficio3liv::model()->findAll($criteria);
$data=CHtml::listData($data,'id','nomeufficio');
foreach($data as $value=>$nomeufficio)
{
echo CHtml::tag('option',
array('value'=>$value),CHtml::encode($nomeufficio),true);
}
}
/**
* Carica gli uffici di 4°livello nella dopdownlist.
*/
public function actionPopolaUffici4Liv()
{
$criteria = new CDbCriteria;
$criteria->order = 'nomeufficio ASC';
$criteria->condition = 'id_ufficio_3liv=:id';
$criteria->params[':id'] = (int) $_POST['Utente']['id_ufficio_liv3'];
$data=Ufficio4liv::model()->findAll($criteria);
$data=CHtml::listData($data,'id','nomeufficio');
foreach($data as $value=>$nomeufficio)
{
echo CHtml::tag('option',
array('value'=>$value),CHtml::encode($nomeufficio),true);
}
}
Grazie in anticipo per l’aiuto…