CAutocomplete

Hola a todos !! les saludo desde Colombia. Soy nuevo en Yii y estoy desarrollando mi primer proyecto con este framework y necesito que alguno de ustedes me ayude con el siguiente problema:

Quiero usar CAutocomplete y luego de seguir las instrucciones dadas en la web de Yii, esta no me funciona y creo que es por que el action AutoCompleteLookup no se ejecuta en el controlador SitioController. El ejemplo lo tome de http://www.yiiframework.com/doc/cookbook/25/ y este es el código que tengo en el form:

<?php $this->widget(‘CAutoComplete’,

array(

//name of the html field that will be generated

‘name’=>‘Sitio_ID’,

//replace controller/action with real ids

‘url’=>array(‘SitioController/AutoCompleteLookup’),

‘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’=>3,

‘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’=>‘60’),

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

));

?>

<?php echo CHtml::hiddenField(‘Sitio_ID’); ?>

//*******************************************************************

Y en el controlador esto:

//Action

public function actionAutoCompleteLookup()

{

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 = “Tipo <> ‘Dirección’ AND NombreSitio_ID LIKE :keyword”;

$criteria->params = array(":keyword"=>"%$name%");

$criteria->limit = $limit;

$SiteArray = SitioTotal::model()->findAll($criteria);

$returnVal = ‘’;

foreach($SiteArray as $Site)

$returnVal .= $Site->getAttribute(‘NombreSitio_ID’).’|’.$Site->getAttribute(‘Sitio_ID’)."\n";

echo $returnVal;

}

//die();

}

Agradeceria enormemente a quien me resolviera este inconveniente ya que llevo varios dias en ello y he recurrido a $form->dropDownList como función alterna.

Gracias,

JJHA.

Y no sera que te hace falta agregar AutoCompleteLookup al accessRules del controller ?

Seguí tus indicaciones… pero aún así no me funciona. La consola de errores de Firefox me arroja la siguiente advertencia cuando se ejecuta el evento:

Advertencia: La propiedad ‘charCode’ de un evento keydown no debería usarse. El valor no tiene sentido.

Archivo Fuente: http://localhost/WebSALA/index.php/sitio/create

Línea: 0

La advertencia es normal… pero entonces si estas utilizando firebug deberias de ver que tipo de error genera la consulta… en la pestaña de params y respuesta dice que se envio y que recibio… Si el queryString respondio con un 200 OK o un 404, 500, etc…

Definitivamente la consulta sale bien (desplegue los resultados con eco, aunque no encontre la forma de encontrar "la pestaña de params y respuesta dice que se envio y que recibio") y acabo de utilizar CJuiAutoComplete y si me funcionó, pero esta no me sirve porque "no puedo" guardar el ID y solo utiliza un arreglo unidimensional (eso parece).

Inclusive probé generando el Array para asignarlo a la propiedad ‘data’ en vez de ‘url’ y trae los datos (viendo el codigo fuente desde el navegador), pero no los arroja cuando ingreso la palabra clave.

Si estas utilizando la última versión de Yii te recomiendo que no utilices CAutoComplete y los componentes de JUI de ZII ya que no funcionan juntos.

Si no avisame que lo vemos más a detalle.

Gracias

Sebas

Si estoy utilizando la última versión de Yii… que lástima. Pero me puedes dar alguna recomendación para poder usar la función autocompletar y me permita registar el ID del nombre del campo ??

Por fin logré solucionarlo. El problema radicaba en la llamaba al controlador, dado que lo referenciaba colocando el sufijo "Controller" y debe ser únicamente nombre del controlador. Adicionalmente probé juntos los componentes de JUI de ZII y me funciona sin ningún problema.

Agradezco a quienes me acompañaron en este tema.

hola a todos, leí el foro pero no logro que funcione el CAutoComplete, a continuación voy a pegar mi código por si me pueden ayudar.

en la vista

<?php $this->widget(‘CAutoComplete’,

  	array(


                 	//name of the html field that will be generated


     	'name'=&gt;'id_entidad', 


                 	//replace controller/action with real ids


     	'url'=&gt;array('General/AutoCompleteLookup'), 


     	'max'=&gt;10, //specifies the max number of items to display





                 	//specifies the number of chars that must be entered 


                 	//before autocomplete initiates a lookup


     	'minChars'=&gt;1, 


     	'delay'=&gt;5, //number of milliseconds before lookup occurs


     	'matchCase'=&gt;false, //match case when performing a lookup?





                 	//any additional html attributes that go inside of 


                 	//the input field can be defined here


     	'htmlOptions'=&gt;array('size'=&gt;'40'), 





     	'methodChain'=&gt;&quot;.result(function(event,item){&#092;&#036;(&#092;&quot;#id_entidad&#092;&quot;).val(item[1]);})&quot;,


     	));

en el controlador

public function actionAutoCompleteLookup()


{


	if(Yii::app()-&gt;request-&gt;isAjaxRequest &amp;&amp; isset(&#036;_GET['q']))


	{


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


		/ the autocomplete widget to pass in user input


		*/


		&#036;entidad = &#036;_GET['q']; 


		// this was set with the &quot;max&quot; attribute of the CAutoComplete widget


		&#036;limit = min(&#036;_GET['limit'], 50); 


		&#036;criteria = new CDbCriteria;


		&#036;criteria-&gt;condition = &quot;entidad LIKE :sterm&quot;;


		&#036;criteria-&gt;params = array(&quot;:sterm&quot;=&gt;&quot;%&#036;entidad%&quot;);


		&#036;criteria-&gt;limit = &#036;limit;


		&#036;userArray = Entidad::model()-&gt;findAll(&#036;criteria);


		&#036;returnVal = '';


		foreach(&#036;entidadArray as &#036;entidadDescripcion)


		{


			&#036;returnVal .= &#036;entidadDescripcion-&gt;getAttribute('entidad').'|'


			.&#036;entidadDescripcion-&gt;getAttribute('id_entidad').&quot;&#092;n&quot;;


		}


		echo &#036;returnVal;


	}


}

también probé con el CJuiAutoCompleteen la vista y nada :frowning:

&lt;?php &#036;this-&gt;widget('zii.widgets.jui.CJuiAutoComplete', array(


	'name'=&gt;'id_entidad',


	'source'=&gt;array(Entidad::model()-&gt;findAll()),


	// additional javascript options for the autocomplete plugin


	'options'=&gt;array(


	'minLength'=&gt;'1',


	),


	'htmlOptions'=&gt;array(


	'style'=&gt;'height:20px;'


	),


	));?&gt;

y la consulta funciona bien… ??

Porq yo la escribiria de otra manera :


criteria->condition = "entidad LIKE ('%:sterm%')";

$criteria->params = array(":sterm"=>$entidad);

no se como probar si la consulta funciona, estoy perdido con ese tema.

realmente yo solo sgui las instrucciones del sitio sitio de yii y lo adapte al mi aplicación.

ya hice los cambios en la parte de condición pero sigue sin funcionar.

serían tan amables de darme una luz??

aparece algun error de lado del cliente o del servidor ??

ya agregaste el action AutoCompleteLookup al accessRules del controller ??

Sabes si se esta ejecutando la consulta ??

gracias vos, sos un master, no habia agregado la action al access Rules del controller. muchas gracias por instruirme :slight_smile: