Autocomplete no me funciona

Que mas amigos como estan, mucho gusto mi nombre es Daniel, soy de colombia y quiciera que me ayudaran con algo, necesito hacer un autocomplete, este esta dentro de 2 tablas, una que se llama medico y otra comedico, el id de la tabla medico es la llave forania de la tabla comedico, es decir en la tabla comedico tengo el atributi medico_id, entonces necesito tener un campo en el formulario de comedico en el cual al escribir el nombre del medico me carge la lista de los medicos que tengan esas letras, si yo escribo dan me debe cargar una lista de medicos en los cuales el nombre contenga la palabra dan, pero veo donde explican lo mas basico que es esta pagina CAutoComplete

en mi tabla medico tengo los sigientes atributos basicamente

id

nombres

apellidos

email

y en la tabla comedico tengo

id

medico_id

nit

tipoid

entonces el codigo que creo es el sigiente, en el controller de comedico ComedicoController, tengo este action




public function actionFindMedico()

    {

       if(Yii::app()->request->isAjaxRequest && isset($_GET['q']))

       {

            /* q is the default GET variable name that is used by

            / the autocomplete widget to pass in user input

            */

          $name = $_GET['q']; 

                    // this was set with the "max" attribute of the CAutoComplete widget

          $limit = min($_GET['limit'], 50); 

          $criteria = new CDbCriteria;

          $criteria->condition = "nombres LIKE :sterm";

          $criteria->params = array(':sterm' => '%'.$name.'%');

          $criteria->limit = $limit;

          $medicoArray = Medico::model()->findAll($criteria);

          $returnVal = '';

          foreach($medicoArray as $medicoAccount)

          {

             $returnVal .= $medicoAccount->getAttribute('nombres').'|'

                                         .$medicoAccount->getAttribute('id')."\n";

          }

          echo $returnVal;

       }

    }



y en la vista de comedico en _form tengo lo sigiente en la linea donde va el medico_id




<div class="row">

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

		<?php $this->widget('CAutoComplete',

          array(

                         //name of the html field that will be generated

             'name'=>'nombres', 

                         //replace controller/action with real ids

             'url'=>array('findMedico'), 

             'max'=>10, //specifies the max number of items to display

 

                         //specifies the number of chars that must be entered 

                         //before autocomplete initiates a lookup

             'minChars'=>2, 

             'delay'=>500, //number of milliseconds before lookup occurs

             'matchCase'=>false, //match case when performing a lookup?

 

                         //any additional html attributes that go inside of 

                         //the input field can be defined here

             'htmlOptions'=>array('size'=>'40'), 

 

             'methodChain'=>".result(function(event,item){\$(\"#medico_id\").val(item[1]);})",

             ));

    ?>

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

	</div>



cuando ejecuto la vista y digito dan sale como si estubiera cargando, pero se queda alli y miro mi consola de errores y me sale que hay un error, pero ni idea, como les digo apenas comienzo a usar Yii me parecio muy bueno, pero no se que hacer jeje, les pido me ayuden con esto, ademas tambien trate de usar EjuiautocompleteFKField y ese menos, pues ese usa CJuiAutoComplete asi que primero debo aprender CJuiAutoComplete pa poder usar el otro, creo. bueno muchas gracias de antemano a todos y estare esperando sus ayudas, muchas gracias

He utilizado CJuiAutoComplete y no he tenido problemas… un ligero bug en la version anterior del framework pero nada serio…

Entonces tengo implementaciones de este componente muy similar a como tu lo haces, con muy pocas diferencias… mira:

Lo que puede ir arriba de este codigo es similar al mio


// Tu retornas un string separado por "|" en cambio yo lo hago utilizando un arreglo con denotacion json

$result = '';

foreach($Cities as $city)

{

  $result[] = array(

    'id'=>$city->city_id,

    'label'=>$city->city_name,

  );   

}

echo CJSON::encode($result);

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

Ahora en la parte del cliente, yo no utilizo methodChain … mas bien utilizo el evento select del componente… y queda así:




'name'=>'city_name', 

'source'=>$this->createUrl('providerSearch'),

'options'=>array(

  'showAnim'=>'fold',

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

    $('#".CHtml::activeId($address, 'city_id')."').val(ui.item.id);

    $('#city_name').val(ui.item.label);

    return false;

  }",

),

Ahora seria bueno que enviaras que tipo de error recibes… si es cliente o servidor… utiliza firebug para ver que sucede y nos comentas

Todo esto fue testeado utilizando la version del framework yii-1.1.6.r2877

amigos me acabo de dar cuenta de algo, esto lo estoy haciendo con la aplicacion creada mediante el CODE GENERATOR, osea mediante este cree los modelos y luego con el CRUD genere las vistas y el controllers, osea es la vista basica que me genera el YII al instalarlo y hacerle las pruebitas, ahora viendo con el firebug me suelta una exepcion y me dice que no tengo permisos para ejecutar esa action, mmm entonces no se que puede ser eso, por que como les digo apenas comienzo con YII y pues estoy haciendo pruebas y eso para la aplicacion en la cual pretendo implementarlo, entonces no se que me dicen ustedes acerca este error que les comento, les adjunto un pantallazo de lo que me salio

Entonces creo que se cual es el problema…

En el metodo accessRules de tu controlador tienes que agregar "findMedico" al usuario que deseas que tenga acceso a esa accion… por ej…


public function accessRules()

{

	return array(

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

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

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

			

		),

	);

}

Eso permitira a todos los usuarios autenticados acceder a la accion findMedico…

aquí hay un post con otra alternativa (zii)

http://www.yiiframework.com/forum/index.php?/topic/16497-ziiwidgetsjuicjuiautocomplete/

gracias Jack Fiallos ya lo solucione, era el permiso a el metodo jeje, ahora trate de hacerlo con JSON como lo tienes tu en tu ejemplo y si recibo la respuesta del metodo que busca los medicos, pero al momento de ponerlo en el form no lo parcea, osea me muestra el resultado de todos los que encontro en una sola linea y en el formato JSON, entonces veo algo que no entiendo, en el metodo ese que dices select veo esto




<?php 

			$this->widget('CAutoComplete',

				array(

                         //name of the html field that will be generated

					'name'=>'nombres', 

                         //replace controller/action with real ids

					'url'=>array('findMedico'), 

					'max'=>10, //specifies the max number of items to display

 

                         //specifies the number of chars that must be entered 

                         //before autocomplete initiates a lookup

					'minChars'=>2, 

					'delay'=>500, //number of milliseconds before lookup occurs

					'matchCase'=>false, //match case when performing a lookup?

 

                         //any additional html attributes that go inside of 

                         //the input field can be defined here

					'htmlOptions'=>array('size'=>'40'), 

 

					'options'=>array(

						'showAnim'=>'fold',

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

											$('#".CHtml::activeId($address, 'medico_id').val(ui.item.id);

											$('#nombres').val(ui.item.label);

											return false;

						}",

					),

				));

		?>



o mas bien no es que vea, si no que no entiendo eso de


CHtml::activeId($address, 'medico_id')

esa variable llamada $address a que se refiere? mira adjunto un pantallazo de como me sale, muchas gracias de nuevo me sirvio de mucho tu ayuda, como te digo de la forma en que lo puse me sale bien, pero quiciera ponerlo de la forma en como lo tienes tu, pues pa tener con JSON que es mejor me parece, espero entonces ayuda.

Ahh … es que $address es el nombre de mi modelo… creo que en tu caso deberias de utilizar $model

Y por cierto… ese codigo que retorna json solamente funcionara con la ultima version (1.1.6) del framework … si utilizas la version anterior es necesario cambiar unas cosillas porque tenian un bug en ese entonces.

bueno de nuevo agradeciendo a Jack Fiallos por la ayuda que me brindo hasta hoy comento aca por que como apenas ayer me registre apenas use mis 3 post de primer dia no pude hacer mas hasta ahora, les comento que me toco cambiar a CJuiAutoComplete por que con el CAutoComplete no me funcinaba bien el JSON, pero ya lo deje 10 funcionando entonces si alguien necesita ayuda acerca de esto pues aca queda este post donde pueden preguntar y con mucho gusto les ayudo a solucionar lo concerniente a este tema ojo soy novato y pues a medida que vaya aprendiendo esto ire ayudando mas jejeje, pero por ahora con este tema, gracias todos los interesados que vieron mi post, continuare por que el camino que estoy recorriendo aun me falta mucho y segire preguntando, que esten bien

como dije regresaria y regrese jaja, necesito poner esta consulta SQL




SELECT todo FROM (SELECT CONCAT(codigo, ' ', descripcion) AS todo FROM `cie`) AS cosa WHERE todo LIKE '%est%'



osea es lo mismo de ahora rato, solo que necesito hacer la búsqueda no en una sola columna si no en 2 columnas entonces primero uno esas dos columnas y sobre el resultado de esta unión hago la búsqueda con el texto que viene con un LIKE, espero haber sido claro si no me dicen a ver, osea yo buscare un texto, pero este texto debe ser buscado en la unión de dos columnas de una tabla, si?

Abre tu post en un nuevo hilo…

listo

Hola Amigos,

Soy nuevo en este Framework de yii, he estado revisando este post y me funciona de maravillas, pero resulta que cuando selecciono el dato del autocomplete no me deja… me pueden echar una mano

Mil Gracias,

Hola pipook, podrias poner como quedo to controller y tu view con CJuiAutoComplete, he tratado de hacer lo que exitosamente resolviste, muchas gracias.

Fijate, yo también tengo el mismo problema, si lo pudiste solucionar? De ser así, como?