Autocompletado con CJuiAutoComplete en Yii

| 2013-04-30 | No hay comentarios »

Una de las cosas útiles en una aplicación web es sin dudas el autocompletado que nos permite ir mostrando los resultados de lo que escribimos en un textfield para luego seleccionar lo que estamos buscando, todo se hace vía AJAX.

3135

Para usar el widget que trae Yii incorporado ir a /protected/views/nombre_del_modelo/_form.php y agregar lo siguiente:

Referencias (Autorizaciones y Ciudadanos):

ciudadanos_id_ciudadano = nombre del campo que lleva la clave primaria de un registro de la tabla ciudadanos, visualizar que es un campo oculto.

ciudadanosIdCiudadano= nombre de la relación, para mostrar el nombre de la ciudad.

nombre_ciudadano = campo ficticio para mostrar el nombre de la ciudad en el textfield (para no mostrar el id).

‘sourceUrl’=>$this->createUrl(‘ListarCiudadanos’), = Utiliza la función ListarCiudadanos para traer los resultados vía AJAX.


<?php echo $form->labelEx($model,'ciudadanos_id_ciudadano'); ?>
 <?php
 /*echo $form->textFieldRow($model,'ciudadanos_id_ciudadano',array('class'=>'span5','maxlength'=>10)); */
 if ($model->ciudadanos_id_ciudadano)
 {
 $value=($model->ciudadanosIdCiudadano->nombres_ciudadano.' '.$model->ciudadanosIdCiudadano->apellidos_ciudadano .' ('.$model->ciudadanosIdCiudadano->numero_doc_ciudadano.')');
 }
 else {
 $value='';
 }
 echo $form->hiddenField($model, 'ciudadanos_id_ciudadano' ,array());

 $this->widget('zii.widgets.jui.CJuiAutoComplete', array(
 'name'=>'nombre_ciudadano',
 'model'=>$model,
 'value'=>$value,
 'sourceUrl'=>$this->createUrl('ListarCiudadanos'),
 'options'=>array(
 'minLength'=>'2',
 'showAnim'=>'fold',
 'select' => 'js:function(event, ui)
 { jQuery("#Autorizaciones_ciudadanos_id_ciudadano").val(ui.item["id"]); }',
 'search'=> 'js:function(event, ui)
 { jQuery("#Autorizaciones_ciudadanos_id_ciudadano").val(0); }'
 ),
 ));
 ?>

Luego ir a /protected/controllers/nombre_del_controlador.php y agregar la función estática ListarCiudadanos (solo en este caso, fijarte en la parte sourceUrl).


//nombres_ciudadano y apellidos_ciudadano son campos de la tabla ciudadanos para mostrar en el autocompletado.

//id_ciudadano es la pk de la tabla ciudadanos, lo que se usaría para guardar como fk al elegir una opción del listado.

public function actionListarCiudadanos($term)
 {
 $criteria = new CDbCriteria;
 $criteria->condition = "LOWER(nombres_ciudadano) like LOWER(:term) or LOWER(apellidos_ciudadano) like LOWER(:term)
 or (numero_doc_ciudadano) like LOWER(:term)";
 $criteria->params = array(':term'=> '%'.$_GET['term'].'%');
 $criteria->limit = 30;
 $models = Ciudadanos::model()->findAll($criteria);
 $arr = array();
 foreach($models as $model)
 {
 $arr[] = array(
 'label'=>($model->nombres_ciudadano.' '.$model->apellidos_ciudadano.' ('.$model->numero_doc_ciudadano.')'), // label for dropdown list
 'value'=>($model->nombres_ciudadano.' '.$model->apellidos_ciudadano.' ('.$model->numero_doc_ciudadano.')'), // value for input field
 'id'=>$model->id_ciudadano, // return value from autocomplete
 );
 }
 echo CJSON::encode($arr);
 }

Por más información ir a este link.

Acerca del autor: Rodrigo Paszniuk

Ingeniero Informático, amante de la tecnología, la música, el ciclismo y aprender cosas nuevas.

Posts Relacionados

  • Reportes gráficos en Yii
  • Backup en Yii
  • Manual intermedio de Yii framework (PHP)
  • Maestro-Detalle / Factura Compra en Yii – Parte II



SEGUÍNOS EN FACEBOOK


GITHUB