Para usar la datatable es necesario primero incluir los scripts y css.(estos son de la versión -1.10.18
versiones posteriores pueden cambiar ed nombres, pero en esencia son estos)
- 'jquery-x.xx.x.min.js'
- 'bootstrap.min.js'
- 'datatables.min.js'
- 'bootstrap.min.css'
- 'datatables.min.css'
Con
<script src='../scripts/xxxxxxx.min.js'> y
<LINK href='../scripts/datatables.min.css'
type=text/css rel=StyleSheet> por ejemplo.
Además crear la carpeta
DataTables-1.10.18 si estamos en esa versión, subcarpeta images y
copiar las imágenes de las flechitas.
Luego en el body ponemos una tabla, con id (en este caso
mitabla) y obligatoriamente de la clase display, por ejemplo:
<table id="mitabla" class="display"> y dentro solo la cabecera con
thead
las columnas con
th (ver código html).
Ahora por jquery inicializamos la tabla con una función donde determino primero el aspecto
general en:
$.extend( $.fn.dataTable.defaults, {........} ); con opciones como:
- searching: true,
- ordering: true,
- columnDefs: [{targets: 0,className: 'dt-body-center'}]
(Los detalles en el código)
Ahora cargamos los valores desde la base de datos por AJAX (ver el link "Ver código script PHP-AJAX" abajo
para el código PHP de devolución.
var tabla = $('#mitabla').DataTable({.......} ); Acá
hay dos secciones obligatorias:
- ajax: { }, con la llamada al script que devuelve el JSON
data en url:(detalles en AJAX )
-
La sección columns: [{ data: 'xxx1' },{ data: 'xxx2' }...]); con un subitem
por columna definida en el thead.
Si el atributo es data xxx , éste debe ser el nombre de cada índice en el JSON (Es cómodo entonces en el
script PHP volcar la salida de SQL a un vector con
$test[] = $registro; json_encode($test);)
lo cual hace que la clave coincida con el nombre del campo de la tabla en la base de datos.
Si hay que preprocesarlos debemos generar un substring con las claves que recibirá el ajax, también aquí es
cómodo mantener las claves de la tabla (ver código)
1) Script JAVASCRIPT AJAX
<head>
<script src="../scripts/jquery-3.6.4.min.js"> </script>
<script src="../scripts/bootstrap.min.js"> </script>
<script src="../scripts/datatables.min.js"> </script>
<script src="scripts/dataTables.responsive.min.js" > </script>
<LINK href="../css/estilos.css" type=text/css rel=StyleSheet >
<LINK href="../scripts/bootstrap.min.css" type=text/css rel=StyleSheet>
<LINK href="../scripts/datatables.min.css" type=text/css rel=StyleSheet>
<LINK href="scripts/jquery.dataTables.min.css" type=text/css rel=StyleSheet>
<title>DATATABLE, MANEJO</title>
<script>
$(document).ready( function () {
// defaults para todas las tablas
$.extend( $.fn.dataTable.defaults, {
searching: true,
ordering: true,
columnDefs: [
{
targets: 0,
className: 'dt-body-center'
}
]
} );
// inicializo tabla
var tabla = $('#mitabla').DataTable({
ajax: {
url: 'tec-php-preprocesardatatable-procesar.php?accion=cargar',
dataSrc:''
},
columns: [
{ data: 'id' },
{ data: 'nombre' },
{ data: 'direccion' },
{ data: 'mail' },
{ data: 'fecha_nac' }
]
});
} );
</script >
</head>
2) HTML
<div style="padding-top:20px;"> <!-- contenedor-->
<div class="recuadro">
<table id="mitabla" class="display">
<thead>
<tr>
<th> id </th>
<th> NOMBRE </th>
<th> DIRECCION </th>
<th> EMAIL </th>
<th> NACIMIENTO </th>
</tr>
</thead>
</table>
</div> <!-- fin contenedor tabla -->
</div> <!-- fin contenedor -->
3) Script PHP
<?php
include("conexion.php"); // abre la conexión a la base de datos
global $conn; //lo usamos en conexion, lo declaramos acá para no llamar siempre a $GLOBALS[]
$accion= $_GET["accion"];
Switch ($accion){
case "cargar":
$test= array();
//echo ("inicio
"); //borrar
if(conectar()){
$sqltxt = "SELECT id,nombre,direccion,mail,fecha_nac FROM clientes LIMIT 1,100";
$sqldevolucion = mysqli_query($conn,$sqltxt);
if (!mysqli_num_rows($sqldevolucion)) {
echo("error, no se devuelven registros");
} else {
while ($r = mysqli_fetch_array($sqldevolucion, MYSQLI_ASSOC)){
// $test[] = $registro; // agrego a test[] cada registro como sub-array sin procesar
$id = $r["id"];
$nombre = strtoupper($r["nombre"]);
$direccion = ucfirst($r["direccion"]);
$mail = $r["mail"];
$fecha_nac = substr($r["fecha_nac"],8,2)."/".substr($r["fecha_nac"],5,2)."/".substr($r["fecha_nac"],0,4);
$test[] = array("id" =>$id,"nombre" => $nombre,"direccion" => $direccion,"mail" => $mail,"fecha_nac" => $fecha_nac);
} // fin while
echo json_encode($test); // lo paso a json y lo exporto
mysqli_free_result($sqldevolucion); //devuelvo recurso a memoria
mysqli_close($conn); // cierro conexion
}
}else{
echo(mysqli_error($conn));
} //fin if conectar
break;
// fin de CARGAR
}
?>