filtro poco elegante

:)

cerco di spiegare il codice.

ho due select la seconda dipende dalla prima.




	<div class="row">

		<?php echo $form->labelEx($model,'id_responsabili'); ?>

		<?php 	echo $form->dropDownList($model, 'id_responsabili', $idR, 

						 array(

					 	'empty' => 'Lista Responsabili',

                        			'OnChange'=>'this.form.submit()',

		 				)

                                               );

			                       ?>

		<?php echo $form->error($model,'id_responsabili');?>

		<?php # echo $form->textField($model,'id_responsabili'); ?>

	</div>


	<div class="row">

		<?php echo $form->labelEx($model,'ufficio'); ?>

		<?php 	echo $form->dropDownList($model, 'id_ufficio', 

                $listauffici,array('empty' => 'Lista Uffici')); ?>

		<?php echo $form->error($model,'id_ufficio'); ?>

	</div>



la seconda select dipente dalla prima, e per recuperare il valore della prima select faccio un submit del form dopo la sua modifica, dopo di chè lo recupero con:


if(isset($model->attributes["id_responsabili"]))

in questo modo ho il valore che mi serve per fare gli opportuni filtri.

:lol: e fin qui funziona tutto perfettamente, ma la soluzione mi sembra poco elegante.

è attivo jquery :




$form=$this->beginWidget('CActiveForm', array(

	'id'=>'incaricati-form',

	'enableAjaxValidation'=>true,

)); ?>



potrei recuperare il valore della prima select senza fare il SUBMIT? è un po’ antipatico il fatto

che invia i dati.

grazie mille

:lol:

Io ho trovato questo link sulle dropdownList dipendenti.

Da quello che leggo:


echo CHtml::dropDownList('country_id','', array(1=>'USA',2=>'France',3=>'Japan'),

array(

'ajax' => array(

'type'=>'POST', //request type

'url'=>CController::createUrl('currentController/dynamiccities'), //url to call.

//Style: CController::createUrl('currentController/methodToCall')

'update'=>'#city_id', //selector to update

//'data'=>'js:javascript statement' 

//leave out the data key to pass all form values through

))); 

 

//empty since it will be filled by the other dropdown

echo CHtml::dropDownList('city_id','', array());

Ed in particolare qui:


array(

'ajax' => array(

'type'=>'POST', //request type

'url'=>CController::createUrl('currentController/dynamiccities'), //url to call.

'update'=>'#city_id',

)

è possibile aggiornare automaticamente e con codice pulito Yii una dropdownList. Dovendo richiamare il metodo currentController/dynamiccities, dovremo aggiungere il metodo al nostro controller:


public function actionDynamiccities()

{

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

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

 

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

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

    {

        echo CHtml::tag('option',

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

    }

}

ma sopratutto aggiungere anche il permesso nelle accessRules. Tra le altre cose, ti ringrazio per la domanda =). Non mi ero mai spinto a tanto e so che mi servirà presto!

grazie mille. è bello collaborare insieme.

guardavo proprio quello che mi hai indicato. ti farò sapere.

ma nonostante tutto sono contento di essere arrivato ad una soluzione.

sai cosa mi è stato d’aiuto?

vedere il sorgente finale di yii?

;D

ho omesso di dire che il risultato della select doveva essere salvata nel DB.

comunque…provo ma il mio codice non va




echo CHtml::dropDownList('id_responsabili','', $idR,

array(

'ajax' => array(

'type'=>'POST', //request type

'url'=>CController::createUrl('incaricati/controlloresp'), //url to call.

//Style: CController::createUrl('currentController/methodToCall')

'update'=>'#id_ufficio', //selector to update

//'data'=>'js:javascript statement' 

//leave out the data key to pass all form values through

))); 

 

//empty since it will be filled by the other dropdown

echo CHtml::dropDownList('id_ufficio','', array());

?>	




penso che nel controller non arrivi proprio.

il mio controller incaricati è:




	public function actionControlloresp()

	{

		echo $_POST['id_ufficio'];

		echo "sono in controller"; 

   $data=Uffici::model()->findAll('parent_id=:parent_id', 

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

 

    $data=CHtml::listData($data,'id_ufficio','ufficio');

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

    {

        echo CHtml::tag('option',

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

    }

		

	}



il mio jQuery è:




<script type="text/javascript">

/*<![CDATA[*/

jQuery(function($) {

jQuery('body').delegate('#id_responsabili','change',function(){jQuery.ajax({'type':'POST','url':'/gestionePrivacy/index.php?r=incaricati/controlloresp','cache':false,'data':jQuery(this).parents("form").serialize(),'success':function(html){jQuery("#id_ufficio").html(html)}});return false;});

$('#incaricati-form').yiiactiveform({'attributes':[{'inputID':'Incaricati_grado','errorID':'Incaricati_grado_em_','model':'Incaricati','name':'grado'},{'inputID':'Incaricati_nome','errorID':'Incaricati_nome_em_','model':'Incaricati','name':'nome'},{'inputID':'Incaricati_cognome','errorID':'Incaricati_cognome_em_','model':'Incaricati','name':'cognome'},{'inputID':'Incaricati_id_responsabili','errorID':'Incaricati_id_responsabili_em_','model':'Incaricati','name':'id_responsabili'},{'inputID':'Incaricati_id_ufficio','errorID':'Incaricati_id_ufficio_em_','model':'Incaricati','name':'id_ufficio'},{'inputID':'Incaricati_id_tipodatitrattati','errorID':'Incaricati_id_tipodatitrattati_em_','model':'Incaricati','name':'id_tipodatitrattati'},{'inputID':'Incaricati_id_incarichi','errorID':'Incaricati_id_incarichi_em_','model':'Incaricati','name':'id_incarichi'}],'summaryID':'incaricati-form_es_'});

});

/*]]>*/

</script>