[Resolvido] Enviando a key com CJuiAutoComplete e/ou EJuiAutoComplete

Boa tarde, gostaria de saber se alguém tem um exemplo de como enviar a chave para o controller.

Tentei utilizar o CJuiAutoComplete e o EJuiComboBox(que é o que eu realmente quero) mais ele só envia o "value" do array e não envia a "key". Eu preciso da chave(key) pois ela á uma pk que eu utilizo no meu form.

Segue exemplo do meu código com o EJuiComboBox:




    $data = CHtml::listData(Model::model()->findAll(), 'codigo', 'nome');

            

    $this->widget('ext.combobox.EJuiComboBox', array(

        'model' => $model,

        ...,

        'data' => $data,

        ...            

    ));



Quando utilizo o CJuiAutoComplete eu chamo via controller o autocomplete




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

        'name'=>'fkModel',

        'source'=>Yii::app()->createUrl('/model/autocomplete'),

        // additional javascript options for the autocomplete plugin

        'options'=>array(

            'minLength'=>'1',

        ),

        'htmlOptions'=>array(

            'style'=>'width:35em;'

        ),

    ));


....




Controller




    public function actionAutocomplete(){

        $res = array();

          

        $term = Yii::app()->getRequest()->getParam('term', false);

        if ($term)

        {

            $qtxt ="SELECT nome, codigo FROM Model WHERE nome LIKE :nome";

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

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

            $res =$command->queryColumn();

            

        }


        echo CJSON::encode($res);

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

    }



[s]Tentei customizar mais não deu certo também. Nem o ui.item.id e nem o ui.item.name vão setados, apenas o ui.item.label e o ui.item.value que ambos contém o mesmo valor.

Se eu pesquiso por um funcionário, por exemplo, o ui.item.label e o ui.item.value vem com "Funcionário 1".

<_<[/s]

Editado:

A custumização deu certo, apenas mudei de $command->queryColumn(); para $command->queryAll();

Porém, quero utilizar o EJuiComboBox, pois ele permite a exibição de todos os items clicando no botão que fica logo ao lado.

Boa tarde, consegui setar um campo hiddem com o id (chave estrangeira que uso no model), porém quando não seleciono item algum o campo hidem ainda permanece com o valor do último select…

Alguém sabe como resolver tal problema??

Cara, não sei se pode resolver, mas fiz algo parecido com o que está no link:

Simple complete

Ele não retorna o id não. Creio que seja bom renomear no select o id e o nome, como eu fiz de mudança para o exemplo do link:




public static function usersAutoComplete($name='') {

		$sql= 'SELECT cliente_id AS id ,nome_cliente AS label FROM mtt_clientes WHERE nome_cliente LIKE :name';

		$name = '%'.$name.'%';

		return Yii::app()->db->createCommand($sql)->queryAll(true,array(':name'=>$name));

	}



tenta fazer o passo a passo, foi o que eu fiz e deu certo.

Até mais.

Fiz um parecido utilizando também o CJuiAutoComplete, porém nele não tem a opção de mostrar todos os usuários,

saca?

No EJuiComboBox tem exatamente da forma que eu quero, tentei modificá-lo porém ele usa outro javascript para fazer o autocomplete. Ele não chama o $js = “jQuery(’#{$id}’).autocomplete($options);”; e sim o $js = “combobox({$options});”; que é um arquivo .js que já vem com ele e se eu mudar a chamada ele exibe um combobox e um input text logo abaixo.

E também quando o campo perde o foco e não existe nenhum item com a descrição digitada o campo ainda permanece preenchido.

O estilo dele é que nem o autocomplete do primefaces que usa o combobox também: segue o link Primefaces ComboBox Autocomplete

[Editado]

[s]Fazendo da seguinte forma o myAutoComplete exibe todos os valores, até ai tudo bem, porém quando pesquiso por algum item ele me exibe é o id e não o label, e o id é sequêncial, no meu banco tem mais ou menos assim a sequência dos ids [1,3,4,5,8,9,10,11,12]

dai o que ele exibe é [1,2,3,4,5,6,7,8,9][/s]




<?php

$this->widget('ext.myAutoComplete', array(

    'model'=>$model,

    // 'attribute'=>'user_id',

    'name'=>'user_autocomplete',

    'source'=>$this->createUrl('user/autoComplete'),  // Controller/Action path for action we created in step 4.

    // additional javascript options for the autocomplete plugin

    'options'=>array(

        'minLength'=>'0',

    ),

    'htmlOptions'=>array(

        'style'=>'height:20px;',

    ),        

));

?>


<button onclick='$("#user_autocomplete").autocomplete("search", "");

                 $("#user_autocomplete").focus();' id="btn-b" class="ui-button ui-widget ui-state-default ui-button-icon-only ui-corner-right ui-button-icon" type="button" tabindex="-1" title="Exibir Todos" role="button">

<span class="ui-button-icon-primary ui-icon ui-icon-triangle-1-s"></span>

<span class="ui-button-text"> </span>

</button>



Obs: o que está tachado eu consegui resolver, na consulta ao banco eu tava usando o queryColumn e não o query All

Deu tudo certo agora, vlw Acácio Lima pela ajuda. \o