CJuiAutoComplete Ejemplo yii (EJEMPLO)

Ejemplo donde se autocompleta la información de productos, en una factura de compras.

CompraController.php*

public function accessRules()

{


	return array(


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


			'actions'=>array('index','view','autocomplete'), //dar permiso al autocomplete


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


		),


             .......

public function actionAutocomplete($term)

    {


        $criteria = new CDbCriteria;


        $criteria->compare('LOWER(Descripcion)', strtolower($_GET['term']), true);


        $criteria->order = 'Descripcion';


        $criteria->limit = 30; 


        $data = Productos::model()->findAll($criteria); //Productos es mi modelo 





        if (!empty($data))


        {


         $arr = array();


         foreach ($data as $item) {


          $arr[] = array(


            'id' => $item->CodProducto,


            'value' => $item->Descripcion,


            'label' => array($item->Descripcion, $item->PreVenta), //para guardar varios datos y luego tomarlos en la vista.


          );


         }


        }


        else


        {


         $arr = array();


         $arr[] = array(


          'id' => '',


          'value' => 'No se han encontrado resultados para su búsqueda',


          'label' => 'No se han encontrado resultados para su búsqueda',


         );


     }





     echo CJSON::encode($arr);


    }

_form.php*

<?php $this->widget(‘zii.widgets.jui.CJuiAutoComplete’,

                  array(


                   'id'=&gt;'CodProducto',


                   'name'=&gt;'Descripcion', // Nombre para el campo de autocompletar


                   'model'=&gt;&#036;model_detalle,


                   'value'=&gt;&#036;model_detalle-&gt;isNewRecord ? '' : &#036;model_detalle-&gt;Detallecompra-&gt;CodProducto.' ',


                   'source'=&gt;&#036;this-&gt;createUrl('compra/autocomplete'), // URL que genera el conjunto de datos


                   'options'=&gt; array(


                     'showAnim'=&gt;'fold',


                     'size'=&gt;'30',


                     'minLength'=&gt;'1', // Minimo de caracteres que hay que digitar antes de relizar la busqueda


                     'select'=&gt;&quot;js:function(event, ui) { 


                      &#036;('#Detallecompra_Precio').val(ui.item.label[1]); // tomamos la información del arreglo


                        


                       }&quot;


                     ),


                   'htmlOptions'=&gt; array(


                    'size'=&gt;40,


                    'placeholder'=&gt;'Producto',


                    'title'=&gt;'Indique el producto.'


                    ),


                  ));  


                ?&gt;