Cjuiautocomplete

Boa tarde pessoal,

Implementei o CJuiAutoComplete em meu projeto e tudo funcionou bem. No entanto, eu gostaria que na hora que fosse cadastrar, ele salvasse o id desse item e não a descrição. Tem como fazer isso ?

Segue meu código atual:

No form:


<?php

			$this->widget('zii.widgets.jui.CJuiAutoComplete', array(

            	'name'=>'logradouro',

            	'model'=>$model,

            	'attribute'=>'logradouro',

            	'value'=>$model->logradouro,

				'source'=>$this->createUrl('itinerario/autocompleteTest'),

				'options'=>array(

						'showAnim'=>'fold',

				),

			));

		?>

No controller:


	public function actionAutocompleteTest() {

		$res =array();


		if (isset($_GET['term'])) {

			$qtxt ="SELECT descricao FROM logradouro WHERE descricao LIKE :descricao";

			$command =Yii::app()->db->createCommand($qtxt);

			$command->bindValue(":descricao", '%'.$_GET['term'].'%', PDO::PARAM_STR);

			$res =$command->queryColumn();

		}


		echo CJSON::encode($res);

		Yii::app()->end();

	}

Supondo que seu modelo tenha o atributo "id" você pode fazer da seguinte maneira:

No form:




<?php


  $modelClass = get_class($model);

  $this->widget('zii.widgets.jui.CJuiAutoComplete', array(

    'name'=>'logradouro',

    'model'=>$model,

    'attribute'=>'logradouro',

    'sourceUrl'=>$this->createUrl('itinerario/autocompleteTest'),

    'options'=>array(

      'minLength'=>'2',

      'select'=>"js:function(event, ui) {

        jQuery('#{$modelClass}_id').val(ui.item.id);

        jQuery('#{$modelClass}_logradouro').val(ui.item.value);

      }",

      'change'=>"js:function(event, ui) {

        if(jQuery('#logradouro').val()==''){

          jQuery('#{$modelClass}_id').val('');

          jQuery('#{$modelClass}_logradouro').val('');

        }

        if (!ui.item) {

          jQuery('#{$modelClass}_id').val('');

          jQuery('#{$modelClass}_logradouro').val('');

        }

      }",

    ),

  ));

?>

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

<?php echo $form->hiddenField($model, 'id'); ?>

<?php echo $form->hiddenField($model,'logradouro'); ?>




No Controller:




<?php

public function actionAutocompleteTest($term='')

{

  if( !empty($term) ){

    $criteria = new CDbCriteria;

    $criteria->compare('descricao', $term, true);

    $criteria->order = 'descricao';

    $result = Logradouro::model()->findAll($criteria);

    $returnVal = array();

    foreach( $result as $item ){

      $returnVal[] = array(

        'label'=>$item->descricao,

        'id'=>$item->id,

      );

    }

    echo CJSON::encode($returnVal);

  }

  Yii::app()->end();

}

?>

Muito obrigado, Wanderson! Funcionou perfeitamente!