dunque se posso darti qualche consiglio cerca di dividere meglio i layer dell’applicazione.
nelle view non deve esserci alcuna logica, devono solo presentare dei contenuti.
genera all’interno del model i metodi contenenti quei parametri fissi di ricerca se così ti servono, in maniera tale che nella view ti limiti a richiamare il metodo statico del model senza dover mettere tutte quelle righe di codice vero e proprio.
stessa cosa vale per il codice commentato.
se devi postarlo nel form eliminalo, e sarebbe buona cosa toglierlo proprio.
aggiungi poi dei commenti significativi al codice, così che non ti ci perdi.
tornando alla tua domanda vedo che una dropdownlist è già inserita all’interno del tuo form:
Tieni presente che quando fai $form->dropDonwList, stai chiamando il metodo CHtml::activeDropDownList, quidi con quell’active in piu’ fai il lavoro solito.
e che mi permetteva il salvataggio del dato selezionato.
ma la mia necessità è quella di filtrare i dati a seconda del dato scelto in un’altra dropDownList ,
ovvero :
<?php echo $form->labelEx($model,'id_compagnia');
echo $form->dropDownList($model, 'id_compagnia', $listacompagnie,
array(
'ajax' => array(
'type'=>'POST', //request type
'url'=>CController::createUrl('responsabili/aggiornauffici'),
'update'=>'#id_ufficio', //selector to update
//'data'=>'js:javascript statement'
//leave out the data key to pass all form values through
'data'=>array('id_compagnia'=>'js:this.selectedIndex'),
)));
quindi diciamo che il mio problema è recuparare il valore che mi permette di fare il filtro dei dati.
il controller che mi gestisce l’azione aggiornauffici è questo:
public function actionAggiornauffici()
{
# $_POST['id_compagnia']=(int) '2';
$criteria = new CDbCriteria();
$criteria->select='id_ufficio, ufficio, id_compagnie';
$criteria->order='id_ufficio';
$criteria->condition='id_compagnie = '.$_POST['id_compagnia'];
$tipodati=Uffici::model()->findAll($criteria);
$data = CHtml::listData($tipodati, 'id_ufficio', 'ufficio');
foreach($data as $value=>$name)
{
echo CHtml::tag('option',array(
'value'=>$value),
CHtml::encode($name),true);
}
}
il problema è risolto se salvo nel model di $data e poi lo vado a recuperare nel view.
oppure avete altre idee?
l’activedropdownlist che funziona perfettamente è :
la seconda dropdownlist viene generata in base a cosa selezioni nella prima.
una volta inviati i dati al db limitati a salvare il dato all’interno della seconda, e se proprio lo vuoi riverificare hai comunque inviati al model entrambi i dati delle due dropdownlist.
io:
eliminerei tanto per cominciare i commenti risalenti ai tuoi tentativi passati che rendono il codice illegibile.
creerei un metodo all’interno del modello per rispondere a quella query, visto che è l’unica cosa che fai fare in quell’azione di quel controller.
all’interno di quel controller chiami quel metodo del modello invece di scrivere tutto
quando i dati arrivano al db (ed arrivano entrambi se le regole nel modello lo permettono e hai assegnato correttamente gli attributi al modello) fai un altro controllo incrociato per vedere se il dato inviato dalla seconda select è valido. (cosa che per altro in base a cosa stai facendo è una forma di sicurezza inutile, visto che mi pare un gestionale interno all’azienda che nessuno dovrebbe provare a raggirare).
come ti ho già detto cerca di dividere correttamente i layer dell’applicazione, allo stato attuale è solo un gran casino <.<