Salve,
ho un form suddiviso in 2 step tramite 2 action.
Nel primo step tra i vari campi ho un campo chiamato "comune".
Il campo comune risiede nella tabella “cap” all’ interno della quale ho anche un campo chiamato “agenzia_nomecompleto” e anche un campo “agenzia_id” che relaziona le tabelle agenzia e cap.
Ho un’ altra tabella chiamata “vettore” dentro la quale ci sono i corrieri (SDA, TNT, GLS etc etc).
Quindi al primo step come detto ho un campo "comune" che è obbligatorio.
Quando l’ utente scrive il “comune” vorrei che al 2° step venisse verificato se quel comune ha un “agenzia” che lo copre.
Quindi se è coperto visualizzo il menu con il nome dell’ agenzia (che copre quel comune), se non è coperto visualizzo solo il menu “Vettore”
Ora come ora, riesco a fare questo creando i menu dipendenti e facendo si che alla scelta del comune mi apra il menu con il nome dell’ agenzia che lo copre. Se non è coperto mi lascia il menu in bianco e mi aggiunge una voce “Vettore” che se selezionata apre il menu dei vettori. Ma cosi non mi piace. Preferirei verificare nello step2 il comune inserito e quindi se è coperto da un’ agenzia visualizzo nel menu il nome dell’ agenzia, se non è coperto visualizzo il menu dei vettori. Qualcuno può aiutarmi perfavore?.
Questo è il codice che uso adesso per visualizzare i menu…ma non mi piace!!!
Form:
........ALTRI CAMPI.........
<?php
$htmlOptions=array(
"ajax"=>array(
"url"=>$this->createUrl("agenzia/AgenziaByComune"),
"type"=>"POST",
"update"=>"#Missiva_agenzia_dest",
),
);
?>
<?php echo $form->dropDownList($model, 'comune_dest',
CHtml::listData(Cap::model()->findAll(), 'comune', 'comune'),
array(
'ajax'=>array(
'type'=>'POST',
'url'=>Controller::createUrl('Missiva/Selezionaagenziadest'),
'update'=>'#'.CHtml::activeId($model, 'agenzia_dest'),
),
'prompt'=>'Seleziona Comune'
)
);?>
<?php echo $form->error($model,'comune_dest'); ?>
........ALTRI CAMPI.........
<td>
<b><font color="#FFFFFF"><?php echo $form->labelEx($model,'Consegna Tramite'); ?></font></b>
<?php echo $form->dropDownList($model,'agenzia_dest',CHtml::listData(Cap::model()->findAll(), 'agenzia_nome_completo','agenzia_nome_completo'), array('id'=>'Missiva_agenzia_dest', 'class'=>'agenzia_dest'));?> <b><u>Se il Comune non è coperto dalle Agenzie, Selezione un Vettore</b></u>
<?php echo $form->error($model,'agenzia_dest'); ?>
<b><font color="#FFFFFF"><?php echo $form->labelEx($model,''); ?></font></b>
<?php echo $form->dropDownList($model,'vettore', CHtml::listData(Vettore::model()->findAll(array('order'=>"`id` ASC")), 'nome','nome'),array('id'=>'Vettore', 'class'=>'Vettore', 'empty'=>'Seleziona Vettore', 'style'=>'display:none'));?>
<?php echo $form->error($model,'vettore'); ?>
</td>
//Funzione Java per verificare che input arriva dal menu Missiva_agenzia_dest
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js "></script>
<script>
$('#Missiva_agenzia_dest').change(function() {
// Hide all drop downs sharing the CSS class "toggledDropDown".
$('#Vettore').hide();
// Build a selector for the selected drop down
var selector = ('#' + $(this).val());
// Show the selected drop down
$(selector).show();
});
</script>
Controller:
....................................
/*Funzione per riempimento Agenzia dest
*/
public function actionSelezionaagenziadest()
{
$id_agenzia = $_POST['Missiva']['comune_dest'];
$lista = Cap::model()->findAll('comune = :id_agenzia', array(':id_agenzia'=>$id_agenzia));
$lista = CHtml::listData($lista, 'agenzia_nome_completo', 'agenzia_nome_completo');
echo CHtml::tag(true);
foreach ($lista as $listaagenzie => $agenzia){
echo CHtml::tag('option', array('value'=>$listaagenzie), CHtml::encode($agenzia), true);
echo CHtml::tag('option', array('value'=>Vettore), CHtml::encode(Vettore), true);
}
}
......................