Foros del Web » Programando para Internet » PHP »

Ayuda con filtrado de tablas php + ajax

Estas en el tema de Ayuda con filtrado de tablas php + ajax en el foro de PHP en Foros del Web. Código PHP: <HTML xml:lang="en-gb" xmlns="http://www.w3.org/1999/xhtml" lang="en-gb"> <head> <script type="text/javascript">   // Almaceno los datos de la tabla que leo, la primera posicion indica si se debe mostrar o no, y la segunda posicion contiene los datos de la fila   var datos = new Array();   // Almaceno la cabecera de la tabla   var cabecera = new Array();   // Columna seleccionada para ordenar   var seleccionado = 0;   // Si el orden es ascendente/descendente en cada columna   var orden = new Array(true, true, true);   // El contenido de cada uno de los filtros   var filtros = new Array("", "", "", "","","","");   // Indice del filtro actual   var filtrado = 0;      // Lee la tabla y guarda los datos y modifica la cabecera para incluir el orden y el filtro   function transformar() {     // Obtengo la tabla     var tabla = document.getElementById("tabla");          // Almaceno y modifico la cabecera, añadiendo el orden y el filtro     var cab = tabla.rows[0]; ...
  #1 (permalink)  
Antiguo 19/12/2009, 15:51
 
Fecha de Ingreso: marzo-2009
Mensajes: 356
Antigüedad: 15 años, 1 mes
Puntos: 7
Ayuda con filtrado de tablas php + ajax

Código PHP:
<HTML xml:lang="en-gb" xmlns="http://www.w3.org/1999/xhtml" lang="en-gb">
<head>

<script type="text/javascript">
  // Almaceno los datos de la tabla que leo, la primera posicion indica si se debe mostrar o no, y la segunda posicion contiene los datos de la fila
  var datos = new Array();
  // Almaceno la cabecera de la tabla
  var cabecera = new Array();
  // Columna seleccionada para ordenar
  var seleccionado = 0;
  // Si el orden es ascendente/descendente en cada columna
  var orden = new Array(true, true, true);
  // El contenido de cada uno de los filtros
  var filtros = new Array("", "", "", "","","","");
  // Indice del filtro actual
  var filtrado = 0;
  
  // Lee la tabla y guarda los datos y modifica la cabecera para incluir el orden y el filtro
  function transformar() {
    // Obtengo la tabla
    var tabla = document.getElementById("tabla");
    
    // Almaceno y modifico la cabecera, añadiendo el orden y el filtro
    var cab = tabla.rows[0];
    for (var i=0; i<cab.cells.length; i++) {
        cabecera[i] = cab.cells[i].innerHTML;
        cab.cells[i].innerHTML = (i != seleccionado) ?
            '<a href="javascript:ordenar('+i+')">'+cab.cells[i].innerHTML+'<img src="imagenes/ord-no.gif" alt="" /></a>' :
            (orden[i]? '<a href="javascript:ordenar('+i+')">'+cab.cells[i].innerHTML+'<img src="imagenes/ord-des.gif" alt="DES" /></a>' :
                       '<a href="javascript:ordenar('+i+')">'+cab.cells[i].innerHTML+'<img src="imagenes/ord-asc.gif" alt="ASC" /></a>');
        cab.cells[i].innerHTML += '<br /><input type="text" id="filtro'+i+'" class="filtro" maxlength="10" onkeyup="filtro(event, '+i+')" value="'+filtros[i]+'" autocomplete="off"/>';
    }
        
    // Guardo los datos de la tabla y marco filas alternas
    for (var i=1; i<tabla.rows.length; i++) {
      if (i%2 == 0) {
        tabla.rows[i].className = "par";
      }
      var aux = new Array();
      for (var j=0; j<tabla.rows[i].cells.length; j++) {
        aux[j] = tabla.rows[i].cells[j].innerHTML;
      }
      datos[datos.length] = new Array(true, aux);
    }
  }
  
    // Funcion que ordena las filas segun la columna que se haya pulsado
    function organizar(a, b) {
        var signo = orden[seleccionado]? 1:-1;
        return (a[1][seleccionado] > b[1][seleccionado]) ? signo : -signo;
    }
  
  
  // Ordena y dibuja la tabla
  function ordenar(i) {
    var tabla = document.getElementById("tabla");
    
    // si es la misma col se cambia el sentido
    if (seleccionado == i) {
        orden[seleccionado] = !orden[seleccionado];
    } else {
        orden[seleccionado] = true;
        seleccionado = i;
    }
    
    // Se ordena la tabla y se dibuja
    datos.sort(organizar);
    dibujarTabla();
  }  
  
  
  // Filtra las filas segun el contenidos de los filtros de cada columna
  function filtro(evt, pos) {
    for (var i=0; i<datos.length; i++) {
        datos[i][0] = true;
        for (var j=0; j<datos[i][1].length; j++) {
            var txt = document.getElementById("filtro"+j).value;
            filtros[j] = txt;
            if (txt != "") {
                // Puede fallar si se usa una expresion regular incompleta
                try {
                    datos[i][0] &= eval('datos[i][1][j].match(/'+txt+'/i) != null');
                } catch (error) {}
            }
        }
    }

    filtrado = pos;
    // dibujo la tabla
    dibujarTabla();
    // Selecciono la caja de texto del filtro actual
    var obj = document.getElementById("filtro"+filtrado);
    obj.focus();
    // Coloco el cursor al final de texto
    if (obj.createTextRange) {
        var r = obj.createTextRange();
        r.moveStart("character", obj.value.length+1);
        r.moveEnd("character", obj.value.length+1);
        r.select();
    } else if (obj.setSelectionRange) {
        obj.setSelectionRange(obj.value.length+1, obj.value.length+1);
    }

  }
  
  // Dibuja la tabla
  function dibujarTabla() {
    var _tabla = document.getElementById("tabla");
    
    // Me creo una copia de la tabla
    var tabla = document.createElement("TABLE");
    tabla.id = "tabla";
    tabla.border = "0";
    tabla.setAttribute("cellspacing","0");
    tabla.setAttribute("cellpadding", "2");
    
    // Creamos los THs
    var tr = document.createElement("TR");
    for (var i=0; i<cabecera.length; i++) {
        var th = document.createElement("TH");
        th.innerHTML = ((i != seleccionado) ?
            '<a href="javascript:ordenar('+i+')">'+cabecera[i]+ '<img src="imagenes/ord-no.gif" alt="" /></a>' :
            (orden[i]? '<a href="javascript:ordenar('+i+')">'+cabecera[i]+ '<img src="imagenes/ord-des.gif" alt="DES" /></a>' :
                       '<a href="javascript:ordenar('+i+')">'+cabecera[i]+ '<img src="imagenes/ord-asc.gif" alt="ASC" /></a>'));
        th.innerHTML += '<br /><input type="text" id="filtro'+i+'" class="filtro" maxlength="10" onkeyup="filtro(event, '+i+')" value="'+filtros[i]+'" autocomplete="off"/>';
        tr.appendChild(th);
    }
    tabla.appendChild(tr);

    // Creamos los TRs
    var cont = 0;
    for (var i=0; i<datos.length; i++) {
        if (datos[i][0]) {
            var tr = document.createElement("TR");
            tr.className = (cont%2==0)? "":"par";
            cont++;
            for (var j=0; j<datos[i][1].length; j++) {
                var td = document.createElement("TD");
                td.innerHTML = datos[i][1][j];
                tr.appendChild(td);
            }
            tabla.appendChild(tr);
        }
    }
    
    // Reemplazo la tabla actual por la nueva
    var padre = _tabla.parentNode;
    padre.replaceChild(tabla, _tabla);

    // ¿¿PERO QUE ES ESTO?? SI NO LO HAGO NO FUNCIONA EN EL INTERNET EXPLORER
    padre.innerHTML=padre.innerHTML+"<div></div>";
    
    // Situo el fondo del filtro para saber en que estado está
    for (var i=0; i<filtros.length; i++) {
        var obj = document.getElementById("filtro"+i);
        if (filtros[i].length > 3) {
            obj.style.backgroundPosition = "88px -45px";
        } else {
            obj.style.backgroundPosition = "88px -"+(filtros[i].length*15)+"px";
        }
    }
    
    
  }
</script>
</head>
<body onload="transformar()">
<table id="tabla" border="0" cellspacing="0" cellpadding="2">
    <tr>
        <th class="th_lista_asosiados">Nro</th>
        <th class="th_lista_asosiados">Nombres</th>
        <th class="th_lista_asosiados">Apellidos</th>
        <th class="th_lista_asosiados">DNI</th>
        <th class="th_lista_asosiados">Cargo</th>
        <th class="th_lista_asosiados">Ingreso</th>
        <th class="th_lista_asosiados">Salida</th>
    </tr>
<?php
      
include('Procesos PHP/ListaAsosiados.php');
    
      while (
$row mysql_fetch_array($resultado))
        {
        
$contador $contador 1;    
      
?>
      <tr>
        <td ><?php echo $contador?></td>
        <td><?php echo $row['ASOSIADO_NOMBRES']; ?></td>
        <td><?php echo $row['ASOSIADO_APELLIDOS']; ?></td>
        <td ><?php echo $row['ASOSIADO_DNI']; ?></td>
        <td ><?php echo $row['ASOSIADO_CARGO']; ?></td>
        <td width="27" class="btn_lista_asosiados" >
          <a href="ModificarCliente.php?CODIGO=<?php echo $row['CODIGO']; ?>" name="btmModificar">
            <img src="imagenes/img_modificar.png" width="16" height="16" title="Ingreso de Asosiado" align="right">
          </a>
        </td> 
        <td width="27" class="btn_lista_asosiados" >
          <a href="EliminarCliente.php?CODIGO=<?php echo $row['CODIGO']; ?>" name="btnEliminar">
            <img src="imagenes/img_eliminar.png" width="16" height="16" title="Salida de Asosiado" align="right">
          </a>
        </td>             
      </tr>
      <?php ?>
</table>
</body>
</html>
hola amigos ese es mi codigo php con ajax, es un filtrado de tablas, pero lo malo es que filtra en cada th (codigo, nombre, apellido, dni, cargo, ingreso, salida) y quisiera que solo filtre en los th nombre, apellidos y dni

como podria acerlo ???

LOS DATOS DE LA TABLA LOS JALA DE LA BD EN MYSQL

gracias
  #2 (permalink)  
Antiguo 19/12/2009, 17:25
Avatar de bioxido  
Fecha de Ingreso: diciembre-2008
Ubicación: $_SERVER['PHP_SELF']
Mensajes: 601
Antigüedad: 15 años, 4 meses
Puntos: 21
Respuesta: Ayuda con filtrado de tablas php + ajax

Yo diria que esto va mas del lado de AJAX, ponelo en ese foro.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:06.