Ver Mensaje Individual
  #1 (permalink)  
Antiguo 07/05/2014, 21:59
Avatar de Alexis88
Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años, 1 mes
Puntos: 977
[APORTE] Buscador de datos similar al de Facebook

Hola amigos del foro, en esta ocasión, quiero compartir con ustedes esta pequeña aplicación web que hice. Un buscador de datos similar al utilizado en Facebook, pero mostrando el resultado en la misma página, sin recargarla. La consulta de datos se realiza a una tabla de la base de datos.

La parte principal se basa en estos dos archivos:

Envío y recepción de datos para ser mostrados en pantalla
Código Javascript:
Ver original
  1. $("#buscar").keyup(function(e){
  2.     var tecla = e.keyCode || e.which;
  3.     if (tecla != 13){
  4.         if ($("#response").css("display") != "none"){
  5.             $("#response").slideUp();
  6.                 }
  7.         }
  8. }).autocomplete({
  9.     minLength: 1,
  10.     source: "buscar.php",
  11.     select: function (event, object){
  12.         $("#response img").prop("src", object.item.src);
  13.         $("#response h1").html(object.item.value);
  14.         $(".dato").eq(0).html(object.item.nombre);
  15.         $(".dato").eq(1).html(object.item.apellido);
  16.         $(".dato").eq(2).html(object.item.email);
  17.         $("#response").slideDown();
  18.     }
  19. }).data("ui-autocomplete")._renderItem = function (ul, item){
  20.     return $("<li></li>")
  21.         .append("<a><img src = '" + item.src + "' class = mini />" + "<div><label class = nombre>" + item.value + "</label><label class = email>" + item.email + "</label></div></a>")
  22.         .appendTo(ul);
  23. };

Búsqueda en la BD y devolución del conjunto de datos encontrados
Código PHP:
Ver original
  1. include_once 'consultas.php';
  2. $consulta = new consultas();
  3. $consulta->cotejamiento();
  4. $dato = $consulta->limpiar($_GET['term']);
  5. $query = $consulta->buscar("SELECT * FROM buscar WHERE nombre LIKE '%{$dato}%' OR apellido LIKE '%{$dato}%' OR CONCAT(nombre, ' ', apellido) LIKE '%{$dato}%'") or exit('Se produjo un error');
  6. if ($query->num_rows){
  7.     $source = array();
  8.     while ($row = $query->fetch_array()){
  9.         $source[] = array('id' => $row['id'], 'value' => $row['nombre'] . ' ' . $row['apellido'], 'nombre' => $row['nombre'], 'apellido' => $row['apellido'], 'email' => $row['email'], 'src' => $row['foto']);
  10.     }
  11.     echo json_encode($source);
  12.     $query->free();
  13. }
  14. else{
  15.     exit ('No se encontraron datos en la consulta');
  16. }

Básicamente, el usuario escribe en un <input> y con el widget Autocomplete de jQuery UI, envío el dato escrito hacia un archivo que buscará coincidencias en la tabla con dicho dato y devolverá un objeto JSON. Con el método _renderItem, le doy un formato especial a los datos recibidos, los cuales son acomodados dentro de una lista desordenada (<ul>).

Cuando el usuario seleccione un dato de la lista, sea con el puntero del mouse o con la tecla ENTER (evento select), cargo los elementos del DOM que separé especialmente para mostrarlos y con ellos, muestro al elemento que los contiene.

DEMO
DESCARGAR

Cualquier pregunta o sugerencia, háganmela llegar, esto lo hice hoy en la tarde, por lo que es probable que pueda ser mejorado.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 12/12/2015 a las 20:57 Razón: Actualización de enlaces