[Resolvido] Problema com CJuiAutoComplete.

E ai galera,

estou com problemas no CJuiAutoComplete na minha aplicação. o que estou percebendo é que o action do source não está sendo chamado.

_form:




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

	'id'=>'avulsa-form',

	'enableAjaxValidation'=>true, //<---- isto tem que ser true mesmo?

)); ?>


...


<div class="row">

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

	<?php

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

                        'model'     => $model,

                        'attribute' => 'fkHospede',

                        'source'    => $this->createUrl('avulsa/autocompleteHospede'),

                        'options'   => array(

                            'minLength' => '2',

                            'showAnim'  => 'fold'

                        ),

                        'htmlOptions' => array(

                        )

                    ));

    ?>

</div>



Controller:




...


public function accessRules()

{

	return array(

		array('allow',  // allow all users to perform 'index' and 'view' actions

			'actions'=>array('index','view'),

			'users'=>array('*'),

		),

		array('allow', // allow authenticated user to perform 'create' and 'update' actions

			'actions'=>array('create','update', 'autocompleteHospede'),

			'users'=>array('@'),

		),

		array('allow', // allow admin user to perform 'admin' and 'delete' actions

			'actions'=>array('admin','delete'),

			'users'=>array('admin'),

		),

		array('deny',  // deny all users

			'users'=>array('*'),

		),

	);

}


...


public function actionAutocompleteHospede()

{

    $res = array();


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

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

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

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

        $res =$command->queryColumn();

    }

    

    echo CJSON::encode($res);

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

}



Já tentei seguir por aqui, e aqui. E nenhum deu certo.

Porém quando uso o meu _form assim

_form:




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

            'model'     => $model,

            'attribute' => 'fkHospede',

            'source'    => array('teste1','teste2','teste3','teste4','teste5'),

            'options'   => array(

                'minLength' => '2',

                'showAnim'  => 'fold'

            ),

            'htmlOptions' => array(

                'style' => 'height:15px;'

            )

        ));



ele funciona perfeitamente. Mais o que eu quero são valores obtidos do banco de dados.

Bom galera parece que o problema ta de certa forma resolvido. Estranho porque não mexi em nada. :blink:

Ele já está fazendo a chamada ao action mais não ta exibindo os valores. :mellow:

Quando eu digito ele faz a busca porém, ao invés dele mostrar os nomes, ele mostra apenas um campo em branco com no máximo 5px de altura. <_<

Isso é o que aparece:

2443

ErroAutoComplete.png

Opa problema resolvido de vez.




public function actionAutocompleteHospede()

    {

        $res = array();


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

            $qtxt ="SELECT nome FROM hospede WHERE nome LIKE :nome";

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

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

            // Troquei o queryAll() 

            // $res =$command->queryAll(); 

            //por queryColumn()

            $res =$command->queryColumn(); 

        }

        

        echo CJSON::encode($res);

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

    }



Flw

Laverson,

Não sei se o autocomplete do Yii 1.1.7+ foi mudado, mais eu procurei aqui em uma aplicação que fiz para um cliente e usei o queryAll() e foreach() para construir o retorno dos dados.




$userArray = Paciente::model()->findAll($criteria);

$returnVal = '';

foreach ($userArray as $userAccount) {

    $returnVal .= $userAccount->getAttribute('nome') . '|' . $userAccount->getAttribute('codpaciente') . "\n";

}

echo $returnVal;



Referência: http://www.yiiframework.com/wiki/25/

Vlw Newerton vou dar uma olhada nisso também. ;)

Do modo que fiz também deu certo. :D

Flw