Jquery tags con autocomplete en KumbiaPHP

Que son los jquery tags? bueno cualquiera que tenga una blog conoce lo que son las etiquetas verdad? Bueno es eso, es tener varios valores en un campo de texto y mandarlos todos a la vez. Queda algo asi junto con el autocomplete:

Jquery tags con autocomplete en KumbiaPHP

Para lograrlo vamos a hacer uso de un este plugin. Existen muchos pero me gusta el estilo facebook de este. Ademas los valores los vamos a traer desde una tabla en la base de datos porque es lo mas normal. Mi tabla va a ser esta:

Jquery tags con autocomplete en KumbiaPHP

Primero vamos a bajar el plugin jquery.tokeninput.js (click derecho->guardar enlace como…) y el estilo css token-input-facebook.css (boton derecho->guardar enlace como…).

El plugin lo vamos a guardar en la carpeta app/public/javascript y al css en app/public/css

Necesitaran tambien obviamente jquery, si no lo tienen lo bajan de algun lado, y ahora debemos incluir todo eso en nuestro template. Yo lo hice en views/templates/default.phtml pero si ustedes usan otros entonces deberan agregar las siguientes lineas en los templates que corresponda. Deberia quedarles algo asi:

  <?php echo stylesheet_link_tag('token-input-facebook') ?>
  <?php echo stylesheet_link_tags(); ?>
  <?php echo javascript_include_tag('jquery-1.3.2'); ?>
  <?php echo javascript_include_tag('jquery.tokeninput'); ?>

Vamos a usar un controlador llamado categorias_controller.php con 2 acciones(index y listarCat) con sus correspondientes vistas y un partial para tags.phtml para el codigo javascript del plugin.

En la vista index.phtml es donde tendremos el campo input text que usaremos para los tags y que tendra el efecto autocomplete:

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

El nombre del input es importante porque lo usaremos en el partial, el codigo del partial es este:

<script type="text/javascript">
$(document).ready(function () {
  //la url que le pasamos debe ser relativa
  $("#input_cat").tokenInput("<?echo "../categorias/listarCat"?>", {
            classes: {
                tokenList: "token-input-list-facebook",
                token: "token-input-token-facebook",
                tokenDelete: "token-input-delete-token-facebook",
                selectedToken: "token-input-selected-token-facebook",
                highlightedToken: "token-input-highlighted-token-facebook",
                dropdown: "token-input-dropdown-facebook",
                dropdownItem: "token-input-dropdown-item-facebook",
                dropdownItem2: "token-input-dropdown-item2-facebook",
                selectedDropdownItem: "token-input-selected-dropdown-item-facebook",
                inputToken: "token-input-input-token-facebook"
            }
          });
});
</script>

Parece largo pero la unica linea importante es la que esta despues del comentario, o sea la de la URL que procesara los resultados, el resto es solo el estilo y algunas cosas mas sin mucha importancia. Como ven estoy llamando a otra vista (listarCat).
La accion listarCat sera la encargada de procesar lo que escribimos y generar una vista con los valores requeridos usando el formato JSON. La accion es esta:

public function listarCat(){
  //esto para que no devuelva el template, solo la vista
  $this->set_response('view');
  //q tiene lo que acabamos de escribir en el campo de texto
  $input = $_GET["q"];
  //hacemos la consulta
  $categorias=$this->Categorias->find("nombre like '%$input%'");
  //hacemos un array que vamos a transformar a formato JSON en la vista
  $this->data = array();
  foreach ($categorias as $cat) {
    $json = array();
    $json['value'] = $cat->id;
    $json['name'] = $cat->nombre;
    $this->data[] = $json;
  }
}

Esta claro con los comentarios verdad? Ahora la vista listarCat.phtml tiene solo lo siguiente:

<?php echo json_encode($data);?>

Eso es todo, ahora si cargan http://localhost/mi_programa/categorias/index/ deberian ver funcionando el efecto de tags y autocomplete.

Esta lindo el efecto y es de lo mas buscados por eso me decidi a postearlo pero nunca lo uso y eso es porque no se como procesar el valor del input!!!!! Jquery tags con autocomplete en KumbiaPHP en la pagina del plugin no dice como, o no veo donde…asi que el que lea esto y sepa eso por favor digame Jquery tags con autocomplete en KumbiaPHP

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://www.kumbiaphp.com/ CaChi

    Muy bien, asi es que se hace comunidad… Muchos deben seguir tu actitud…

    • http://geeks.paraisolinux.com perro

      Gracias :)

  • Pingback: Input con autocomplete jquery en KumbiaPHP | Paraiso Linux

  • http://tecnovita.com nucklear

    No conocia de ese plugin, esta bueno. :-o :up:

    • http://geeks.paraisolinux.com perro

      Si lo pruebas dime por favor como obtener los valores de los ‘tags’ del input text porque hasta ahora no pude obtener esos resultados :(

  • http://www.kumbiaphp.com/ CaChi

    Perro, te deberia funcionar con esto:

    $(document).ready(function () {
    //la url que le pasamos debe ser relativa
    $(“#input_cat”).tokenInput(“”, {
    alert(this.val());
    });
    });

    • http://geeks.paraisolinux.com perro

      No cachi…yo me refiero a que el < ?= input_field_tag('input_cat')?> no me devuelve los valores que quiero, o sea los valores de los tags..Si por ejemplo tengo algo asi:
      < ?=form_tag('controlador/mi_accion')?>
      < ?View::partial('tags')?>
      < ?= input_field_tag('input_cat')?>
      < ?end_form_tag()?>

      y en mi_accion algo asi:
      function mi_accion(){
      $this->valor=$this->post(‘input_cat’);
      }

      Y en mi_accion.phtml tengo:
      < ? echo $valor;?>

      Solo me muestra undefined, undefined, undefined, y asi

  • Al3jandro

    Perro muy buen tutorial, yo solo cambie estos valores, para que mi partial pueda ser reutilizable:

    $(“#input_cat”).tokenInput(“”,
    por
    $(“#”).tokenInput(“”, {
    ..
    Gracias por el tuto

  • http://groleo122@gmail.com luna

    porque tengo problemas con la comillas en kumbia alguien me ayude

    $(document).ready(function () {
    //la url que le pasamos debe ser relativa
    /*de este lugar */
    $(“#input_cat”).tokenInput(“<?echo "../categorias/listarCat”?>”,
    /*hasta este lugare*/{
    classes: {
    tokenList: “token-input-list-facebook”,
    token: “token-input-token-facebook”,
    tokenDelete: “token-input-delete-token-facebook”,
    selectedToken: “token-input-selected-token-facebook”,
    highlightedToken: “token-input-highlighted-token-facebook”,
    dropdown: “token-input-dropdown-facebook”,
    dropdownItem: “token-input-dropdown-item-facebook”,
    dropdownItem2: “token-input-dropdown-item2-facebook”,
    selectedDropdownItem: “token-input-selected-dropdown-item-facebook”,
    inputToken: “token-input-input-token-facebook”
    }
    });
    });

    • http://blogjapon.com.ar perro

      Pero cual es el problema puntual? En general casi todos tienen problemas con las comillas porque hacen un copy&paste de los tutoriales de internet y los pdfs, las comillas deben escribirse a mano.

  • Leon

    Hola perro, muy bueno tu post traducido y explicado aunque la verdad no se como funciona kumbia somo full codeigniter en fin, queria hacerte una consulta si probaste devolviendo los datos del autocomplete que hiciste al agregar a una base de datos por ejemplo para luego poder agregar más o eliminar según sea el caso, bueno espero tu respuesta o bueno a la comunidad gracias un abrazo

    • http://blogjapon.com.ar perro

      La verdad no me quedo clara tu pregunta :P

  • Leon

    Hola de nuevo, bueno lo que quería era que al ingresar los tags mediante el autocomplete y agregarlos a una base de datos, al hacer un edita o modificar de estos datos por ejemplo, como los volvía a mostrar en un formulario de edición, como mencione para luego poder agregar más o eliminar tags según sea el caso.

    En principio se agrega normal los tags, pero para editar ?

    Gracias por la respuesta !!