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();
}
wanderson
(Wanderson Wbc)
August 7, 2013, 7:31pm
2
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!