Input con autocomplete jquery en KumbiaPHP

En un post anterior vimos como usar tags jquery con autocomplete en KumbiaPHP pero….que pasa si solo queremos un solo valor en el campo de texto y no muchos? Bueno, tambien hay muchos plugins jquery para eso y yo voy a explicar uno de los mas sencillos que pueden verlo en esta pagina. Queda asi en uso:

Input con autocomplete jquery en KumbiaPHPOtra vez los valores los vamos a sacar de una tabla en una base de datos, en este caso vamos a usar la misma tabla que en mi post anterior.

De nuevo vamos a tener la misma estructura en la aplicacion: un controlador (categorias_controller.php) con 2 acciones (index y listarCat) con sus correspondientes vistas y un partial (autocomplete.phtml) para que sea mas limpio el codigo de la vista y ademas podamos reusarlo.

Primero habra que bajar todo lo que necesitamos, aqui les prepare un paquete con todo lo que necesitan. Lo descomprimen y tienen 2 plugins jquery (dimensiones y autocomplete) que deben colocar en la carpeta app/public/javascript, tiene el jquery que deben colocar en la misma carpeta y un css que deben colocar en la carpeta app/public/css.

Luego como siempre todo eso debe ser incluido en el template que esten usando, algo asi les deberia quedar:

  <?php echo stylesheet_link_tag('jquery.autocomplete') ?>
  <?php echo stylesheet_link_tags(); ?>
  <?php echo javascript_include_tag('jquery-1.3.2'); ?>
  <?php echo javascript_include_tag('dimensions'); ?>
  <?php echo javascript_include_tag('jquery.autocomplete'); ?>

Primero veamos la vista index.phtml que es donde tenemos el input text. Tiene solo este codigo:

<?View::partial('autocomplete')?>
<?= input_field_tag('input_cat')?>

Otra vez es importante el nombre del input porque lo usaremos en el partial. El codigo del partial es el siguiente:

<script type="text/javascript">
  $(document).ready(function(){
     $("#input_cat").autocomplete("<?echo PUBLIC_PATH."categorias/listarCat"?>");
  });
</script>

Como veran recibe como parametro la URL de la vista que tiene los valores a mostrar.
Antes de ver esa vista tenemos que ver la accion correspondiente pues es donde realizamos la consulta para filtrar los resultados.

public function listarCat(){
  //para que solo se muestre la vista sin el template
  $this->set_response('view');
  //la variable q tiene lo que escribimos en el input text
  $input = $_GET["q"];
  //realizamos la consulta y el resultado lo pasamos a la vista
  $this->cats=$this->Categorias->find("nombre like '%$input%'");

La vista toma esa variable y genera una lista que la verdad no entiendo porque es asi, hubiera sido mejor usar el formato JSON pero bueno, asi funciona Input con autocomplete jquery en KumbiaPHP

<?foreach ($cats as $value) {
	echo "$value->nombre|$value->id \n";
}?>

Una vez mas eso es todo, ahora prueben y deberia funcionar. Es un plugin muy sencillo de usar, antes me complicaba un monton pero era solo por falta de conocimientos y cada dia aprendo un poco mas Input con autocomplete jquery en KumbiaPHP Y si alguien sabe el porque de ese formato para la vista listarCat por favor digamelo en los comentarios.

Actualizacion: Tal como dice CaChi en los comentarios, al valor ‘q’ que recibimos lo debemos pasar por un filter_var. Revisen su articulo para mas informacion.

Suscribete GRATIS!
Recibe las novedades de Paraiso Linux en tu email

About perro

Casi Ingeniero en Informática. Programador en PHP y KumbiaPHP. Lo que mas adoro en el mundo es el conocimiento. Y el anime....y Japon...y el basketball...y bloguear claro. Aun sigo buscando la manera de hacer mi primer millon :)
Categorias jQuery, kumbiaPHP
Tags , , , .
  • http://tecnovita.com nucklear

    De hecho ese plugin en los parametros de configuración puedes elegir como quieras que te reciba los datos para mostrarlo: En listas, un array, Json, o como lo haces vos.

    • http://geeks.paraisolinux.com perro

      Ha..no vi eso…si pudieras ampliar estaria genial :wink:

  • http://cachi.temiga.org CaChi

    Como recomendación para que lo tomen en cuenta al dato que tomamos del $_GET se le ha de pasar un filter_var aka un post donde hablo sobre el tema esto porque muchos obvian el tema de filtrado de datos y algo que debemos siempre tener presente…

    El Post Muy bueno…

    • http://geeks.paraisolinux.com perro

      Gracias CaChi, tenes razon como siempre…ya puse la actualizacion en el post

  • wampicom

    Ese plugin es el autocomplete de bassistance?
    Podrías indicar la página del plugin para ver la documentación oficial por favor.

    Porqué hay que usarlo con el plugin dimensions?

    Voy a probar usandolo como lo explicas en el tutorial, pero una vez intenté usar ese plugin ( sin el dimensions ) y no me gustó porque la lista desplegable que genera con las coincidencias no la ordena alfabéticamente y no supe como ordenarla xD.

    De antemano muchas gracias por tan excelente blog.

    • http://blogjapon.com.ar perro

      Hola…si esta puesto el enlace
      http://docs.jquery.com/Plugins/Autocomplete
      Y la verdad que no tengo idea cual es la funcion del plugin dimensions pero si el a mi no me funciona correctamente.
      Gracias por comentar

    • wampicom

      Listo, ya pude hacer que saliera ordenada, es que antes yo estaba colocando los id al principio y por eso no salia ordenado alfabeticamente. En el controller en el find ordené ascendentemente por nombre y ahora si funciona.

      Aquí la imágen de como me muestra las coincidencias http://bit.ly/bwnGxV

      $j(‘#autocomplete1′).autocomplete(“”,{
      //Caracteres mínimos que se deben digitar para que haga la petición ajax
      minChars: 3,
      //muestra máximo 100 coincidencias en la lista
      max: 100,
      width: 310,
      // Para que se pueda buscar en palabras intermedias
      matchContains: “word”,
      formatItem: function(row, i, max) {
      return row[0] +” – id: ” +row[1] ;
      },
      formatMatch: function(row, i, max) {
      return row[0] + ‘ – id: ‘+row[1];
      },
      formatResult: function(row) {
      return row[0] +” – id: ” +row[1];
      }
      });

      Aún sigo sin saber para que sirve el dimensions.js, pero a mi me afecta el autocomplete porque no me permite desplazarme con las flechas de arriba y abajo del teclado entre los elementos de la lista de coincidencias.

      En la página de ejemplo cargan el plugin junto con otro plugin llamado bgiframe para arreglar problemas en IE.

      Salu2.

      • http://blogjapon.com.ar perro

        Muchas gracias por tu aporte. El bgiframe no lo coloque ni lo pienso colocar…no es mi culpa que ese navegador no cumpla estandares.
        Ademas por suerte ya la mayoria usa Firefox u otros buenos navegadores.

  • http://j053d.net j053d

    Se aprecia mucho ver estas practicas e indicarlas aqui en tu espacio para el conocimiento publico.

    Pero aunque entiendo que el que exista solo aqui en tu blog impulsa el trafico de tu sitio, considero un poco egoista el que realices varias practicas apuntadas al framework y en ningun momento coloques una copia en el wiki, el cual es la documentacion centralizada y oficial del framework y el cual crece por la comunidad de quien desee anexar y enriquecerla mas.

    Si gustas, no tienes que indicar en tus articulos ningun link de referencia al wiki, pero la informacion esta mejor centralizada en mismo punto conocido por todos que esparcida en internet en otros sitios.

    Es tu codigo y practica que de seguro alguna que otra se ha podido depurar con la ayuda de Cachi, Filedio u otros, claro que puedes tener tus apuntes del FW en tu propio espacio/sitio desde luego, pero tambien podria ser que colocaras una copia en la propia wiki que es donde principalmente se iria a ver.

    JF tambien escribe algunas cosas e indica referencias al wiki.

    Es solo una critica “constructiva”, Saludos, cuidate. :-)

    • http://blogjapon.com.ar perro

      No se aceptan criticas constructivas!!!!
      Na mentira :P
      No entiendo como usar la cochina wiki :( ademas a veces no lo hago porque me parece que esta info no es lo suficientemente valiosa como para colcarla en la wiki.
      Pero tienes razon…ya estare por el IRC para que me expliquen como colocar esta info en la wiki.

  • http://www.glosarioit.com Damian

    Hay alguna forma de que el usuario por ejemplo no tenga que poner acento a la palabra a buscar, o sea que me traiga ordenada alfabeticamente con o sin tilde, porque en mi caso si la palabra es con acento me estoy dando cuenta que no la trae.
    Por ejemplo:
    se escribe “ac” y me trae todo lo que empiece con esas dos letras pero si ya me escribe “acu” y solo tengo un término que empiece así y el mismo está con acento por ejemplo:”acústica”, no me lo trae porque el usuario no le puso acento.
    Entonces la idea es que me traiga todo ordenado ya sea con o sin acento.
    Gracias.

    • http://kumbiaphp.com KumbiaPHP

      Hola Damina, eso que comentas sobre los acentos es algo va ligado con la BD y sobre el ordenamiento eso lo defines en el mismo query.

      :up:

  • martha

    Hola buenas noches yo tengo un autocompletador solo que cuando lo ejecuto en mi pc funciona correctamente pero cuando lo subo a un servidor deja de funcionar que sera??? Agradece su ayuda

  • AnaB

    Hola excelente tuto! que posibilidad existe de que lo publiques para el Beta 2?????

    • http://kumbiaphp.com KumbiaPHP

      AnaB, realmente no hay nada extraordinario por hacer para llevarla al beta2… ademas piensa que esa no es un versión *oficial* y como tal no encontrarás nada *oficial*

      • AnaB

        si bueno, lo q pasa es q he tratado d hacerlo y no me funciona…

  • Pingback: Buscador jquery en Kumbiaphp beta2 | Blog de William Gabriel Ubia Mendez