Dropdown List Recupero Id

ciao a tutti,in una form d0iserimento ho una dropdown menu dove carico i dati di un altra tabella: il il valore di selezione nella combo è nome_attività, selezionando tale valore vorrei inserire il suo id in un campo input,




<div class= "rowgroup">

	<?php echo $form->label($model2,'nome2',array('id'=>'name','class'=>'blocklabel')); ?>

		<div class="styled-select">


		<?php echo $form->dropDownList($model2, 'nome',

		CHtml::listData( Attivita::model()->findAllBySql('Select id,nome from attivita order by nome ASC '), 'id','nome'),

		array('empty' => '(Seleziona Attivita)'),

		

		array('htmlOptions'=>array('id'=>'nomeattivita','class'=>'styled-select'))

		);?>

	</div>	



cosi ottengo la combo con i valori…,però non riesco a passarli all’input, stavo cercando di usare jquery che al cambiare il valore dovrebbe farmi un’altra query "select id from attivita where nome =“valore di selezione della combo”, e quindi valorizzare il campo input con il risultato della query…

Parentesi:




                CHtml::listData( Attivita::model()->findAllBySql('Select id,nome from attivita order by nome ASC '), 'id','nome'),




MAI mettere del sql dentro una vista, rompe il concetto dietro all’MVC. Ricava i dati nel controller e passala come variabile.

Chiusa parentesi.

Per risolvere il tuo problema




$('#nomeattivita').on('change', function(){

   var id = $('#nomeattivita OPTION:selected').attr('value');

   $('#selettore_campo_input').val(id);

});



non testato e scritto di getto, ma il concetto è questo

si stavo facendo una prova, ovviamente sposto tutto nel controller!,grazie per la precisazione!,ho fatto cosi e funge




Yii::app()->clientScript->registerScript('assegnaid', "

	//funzione ch cambia valore in base alla selezione

    $('#Attivita_nome').change(function(){

 

	var id = $('#Attivita_nome :selected').attr('value');

	$('#attivitaid').val(id);




    });




", CClientScript::POS_READY);


?>



avrei potuto usare findAll,anche perchè era una semplice query senza parametri giusto?,cero cosi come ho fatto ho rotto il principio mvc,…era una prova volante :D

Si, perchè il findAll trova appunto tutti

Per applicare l’ordinamento potresti:

  • creare un defaultScope con l’order impostato

oppure (meglio

  • creare un name scope con l’order impostato

così (caso 2) potresti fare, nel controller qualcosa tipo




$activity_list = CHtml::listData(ClasseModelloAttività::model()->orderByNome()->findAll(), 'id','nome');


$this->render('...', array (

  'model'           => $model,

  'activity_codes' => $activity_list,

);



… nelle prove è ammesso qualsiasi cosa, ma non lasciarlo così ! In fondo, ci vuole quasi lo stesso tempo a farlo subito bene

OrderByNome?

non è findAll(array(‘order’=>'Nome ');

mi riferivo al caso 2:

“creare un name scope con l’order impostato”

e mi sono immaginato questo nome…

ah ok capito :D pardon

certo, il metodo con l’array e il find funziona, è solo che solo maniaco del riuso

mi sono un attimo intrippato :D…con il “rompimento” della mvc, io ho questa azione che fa una ricerca e va bene, poi vorrei passargli una variabile(un array dire…perchè è il risultato di una query)…alla dropdownmenu




 public function ActionGruppo($group){


           $model = new Attivita('search');

           $model->unsetAttributes();

           $model->gruppi = $group;          

           //$model->categorie = $category;

           $dataProvider = $model->search();

           /// query  da passare al menu a tendina nella view

           $dropdownnome = Attivita::model()->findAllBySql('select a.nome FROM attivita a JOIN gruppo g ON a.id = g.attivita_id WHERE g.nome_gruppo ='.'"'.$model->gruppi.'"');

          

           $this->render('index', array('dataProvider' => $dataProvider,'model'=> $model,'dropdownnome'=>$dropdownnome));

       }