Tabla de Contenidos
Clases: Tablas
Esta clase esta pensada para mostrar tablas de manera rápida y fácil. Agregándole funciones de paginación, búsqueda y ordenación realizadas con JQuery.
Estructura de la clase:
Uso:
$Tabla = new Tablas('Nombre tabla', $ConexionMySQLi); $Tabla->Mostrar();
Métodos:
<html> <table class=“inline”>
<tbody> <tr class="row0"> <th class="col0 centeralign">Nombre</th> <th class="col1 centeralign">Devuelve</th> <th colspan="3" class="col2 centeralign">Valores / Tipo de entrada</th> <th class="col5 centeralign">Requerido</th> <th class="col6 centeralign">Sirve Para</th> </tr> <tr class="row1"> <td rowspan="2" class="col0 leftalign">__construct(NombreTabla, Conexion)</td> <td rowspan="2" class="col1 centeralign">Void</td> <td class="col2">Nombre de la tabla en la base de datos</td> <td class="col3">String</td> <td class="col4">Requerido</td> <td rowspan="2" class="col5 centeralign">Si</td> <td rowspan="2" class="col6">Crea el objeto de la tabla</td> </tr> <tr class="row2"> <td class="col0">Conexion a la base de datos</td> <td class="col1">Objeto Conexión MySQLi</td> <td class="col2">Requerido</td> </tr> <tr class="row3"> <td rowspan="4" class="col0 leftalign">AgregaCampo(NombreCampo, Medida = NULL, NombreEncabezado = NULL, Simbolo = NULL)</td> <td rowspan="4" class="col1 centeralign">Void</td> <td class="col2">Nombre del campo en la tabla.</td> <td class="col3">String</td> <td class="col4">Requerido</td> <td rowspan="4" class="col5 centeralign">No</td> <td rowspan="4" class="col6">Muestra en la tabla el campo indicado. <br /> <strong>Nota:</strong> Si no se especifican por defecto mostrarán todos los campos.</td> </tr> <tr class="row4"> <td class="col0">Medida<br /> Expresada en PX o en %.</td> <td class="col1">String</td> <td class="col2">Opcional</td> </tr> <tr class="row5"> <td class="col0">Nombre que se usará en el encabezado.</td> <td class="col1">String</td> <td class="col2">Opcional</td> </tr> <tr class="row6"> <td class="col0">Agrega un símbolo a continuación del texto en esa columna.</td> <td class="col1">String</td> <td class="col2">Opcional</td> </tr> <tr class="row7"> <td rowspan="2" class="col0">OrdenarPor(NombreCampo, TipoOrden = 'ASC')</td> <td rowspan="2" class="col1 centeralign">Void</td> <td class="col2">Nombre del campo en la tabla.</td> <td class="col3">String</td> <td class="col4">Requerido</td> <td rowspan="2" class="col5 centeralign">No</td> <td rowspan="2" class="col6">Ordena los registros desde la base de datos, por el campo indicado.</td> </tr> <tr class="row8"> <td class="col0">Tipo de orden<br /> - ASC<br /> - DESC</td> <td class="col1">String</td> <td class="col2">Requerido</td> </tr> <tr class="row9"> <td class="col0">Paginador(NumeroCamposMostrar)</td> <td class="col1 centeralign">Void</td> <td class="col2">Cantidad de registos</td> <td class="col3">Int</td> <td class="col4">Requerido</td> <td class="col5 centeralign">No</td> <td class="col6">Realiza un paginado de los registros mostrados en la tabla, según el número indicado.</td> </tr> <tr class="row10"> <td rowspan="2" class="col0">AgregarCondicion(NombreCampo, Valor)</td> <td rowspan="2" class="col1 centeralign">Void</td> <td class="col2">Nombre del campo en la tabla.</td> <td class="col3">String</td> <td class="col4">Requerido</td> <td rowspan="2" class="col5 centeralign">No</td> <td rowspan="2" class="col6">Condiciona los registros a mostrar desde la base de datos.</td> </tr> <tr class="row11"> <td class="col0">Valor de la condición</td> <td class="col1">String</td> <td class="col2">Requerido</td> </tr> <tr class="row12"> <td rowspan="2" class="col0">Mostrar(Encabezados = true, Buscador = false)</td> <td rowspan="2" class="col1 centeralign">Void</td> <td class="col2">Mostrar encabezados</td> <td class="col3">Boolean</td> <td class="col4">Opcional</td> <td rowspan="2" class="col5 centeralign">Si</td> <td rowspan="2" class="col6">Muestra la tabla creada según los métodos utilizados anteriormente.<br /> <strong>Nota:</strong> Muestra Los encabezados y el buscador, según los parámetros introducidos.</td> </tr> <tr class="row13"> <td class="col0">Mostrar buscador</td> <td class="col1">Boolean</td> <td class="col2">Opcional</td> </tr> <tr class="row14"> <td class="col0">Sumatorio(NombreCampo)</td> <td class="col1 centeralign">Double</td> <td class="col2">Nombre del campo en la tabla.</td> <td class="col3">String</td> <td class="col4">Requerido</td> <td class="col5 centeralign">No</td> <td class="col6">Retorna el valor Sumatorio de una columna indicada.<br><strong>Nota:</strong> Este método hay que usarlo después de mostrar la tabla.</td> </tr> </tbody>
</table> </html>
Clase:
<?php class Tablas{ private $_Conexion; private $_Error = false; private $_NombreTabla; private $_Campos = array(); private $_Orden = array(); private $_NumeroRegistros = 0; private $_Ncampos = 0; private $_NOrden = 0; private $_Paginador = false; private $_ConsultaPaginador = ''; private $_NCamposCondicion = 0; private $_CamposCondicion = array(); private $_ConsultaCondicion = ''; private $_NTotalRegistros = 0; private $_ConsultaFinal = ''; private $_IDTUnico; public function __construct($Nombre, $Conexion){ $this->_NombreTabla = isset($Nombre) ? $this->LimpiarCodigo($Nombre) : NULL; $this->_Conexion = (isset($Conexion) && !is_null($Conexion))? $Conexion : NULL; $this->_IDTUnico = str_replace('.','',microtime()); $this->_IDTUnico = substr($this->_IDTUnico, 0, 9); // Verifico que $Conexion sea correcta if (gettype($this->_Conexion) != 'object'){ echo 'Error el valor de $Conexion es del tipo: ' . gettype($this->_Conexion).'<br>'; $this->_Error = true; } else { if (!$this->_Conexion->ping()){ echo 'Fallo al conectar con la base.'; $this->_Error = true; } } } private function TotalRegistrosTabla($Consulta){ if(!$this->_Error){ $Fila = $this->_Conexion->query($Consulta); $TotalFilas = $this->_Conexion->affected_rows; $this->_NTotalRegistros = $TotalFilas; } } private function LimpiarCodigo($Nombre){ $Nombre = trim($Nombre); $Nombre = get_magic_quotes_gpc() ? stripslashes($Nombre) : $Nombre; return $Nombre; } public function AgregaCampo($NombreCampo, $Medida = NULL, $NombreEncabezado = NULL, $Simbolo = NULL){ if (isset($NombreCampo))$this->_Ncampos++; $this->_Campos[$this->_Ncampos][0] = isset($NombreCampo) ? $this->LimpiarCodigo($NombreCampo) : NULL; $this->_Campos[$this->_Ncampos][1] = isset($Medida) ? $Medida : NULL; $this->_Campos[$this->_Ncampos][2] = isset($NombreEncabezado) ? $this->LimpiarCodigo($NombreEncabezado) : NULL; $this->_Campos[$this->_Ncampos][3] = isset($Simbolo) ? $Simbolo : NULL; } public function OrdenarPor($NombreCampo, $TipoOrden = 'ASC'){ if (isset($NombreCampo))$this->_NOrden++; $this->_Orden[$this->_NOrden][0] = isset($NombreCampo) ? $this->LimpiarCodigo($NombreCampo) : NULL; $TipoOrden = strtoupper($TipoOrden); switch ($TipoOrden){ case 'ASC': $TipoOrden = 'ASC'; break; case 'DESC': $TipoOrden = 'DESC'; break; default: $TipoOrden = 'ASC'; break; } $this->_Orden[$this->_NOrden][1] = $TipoOrden; } public function Paginador($CamposAMostrar){ if(is_numeric($CamposAMostrar)){ $this->_NumeroRegistros = $CamposAMostrar; $this->_Paginador = true; } } public function AgregarCondicion($NombreCampo, $Valor){ if (isset($NombreCampo)) $this->_NCamposCondicion++; $this->_CamposCondicion[$this->_NCamposCondicion][0] = $this->LimpiarCodigo($NombreCampo); $this->_CamposCondicion[$this->_NCamposCondicion][1] = $this->LimpiarCodigo($Valor); } private function PreparaCondicion(){ if ($this->_NCamposCondicion >= 1){ $this->_ConsultaCondicion .= ' WHERE '; $ContaO = 0; foreach ($this->_CamposCondicion as $Campo){ $this->_ConsultaCondicion .= $Campo[0] . ' = \''.$Campo[1].'\''; $ContaO++; if($ContaO >= 1 && $ContaO <= count($this->_CamposCondicion) - 1) $this->_ConsultaCondicion.= ' AND '; } } } public function Sumatorio($NombreCampo){ if(!$this->_Error){ $Consulta = 'SELECT SUM('.$NombreCampo.') as total FROM '.$this->_NombreTabla; $Consulta .= $this->_ConsultaCondicion; $Consulta.= ';'; $Fila = $this->_Conexion->query($Consulta); $TotalFilas = $this->_Conexion->affected_rows; if ($TotalFilas >= 1){ $Registro = $Fila->fetch_assoc(); return $Registro['total']; } } } public function Mostrar($Encabezados = true, $Buscador = false){ if(!$this->_Error){ $SaltoLinea = chr(13).chr(10); $Tabulador = chr(9); echo '<div class="ContenidoTabla">'.$SaltoLinea; $Contador = 0; $CamposTabla = array(); // Consulta $Consulta = 'SELECT * FROM '.$this->_NombreTabla; // Condicion if ($this->_NCamposCondicion >= 1){ $this->PreparaCondicion(); $Consulta.= $this->_ConsultaCondicion; } $this->TotalRegistrosTabla($Consulta); // Orden if ($this->_NOrden >= 1){ $Consulta .= ' ORDER BY '; $ContaO = 0; foreach ($this->_Orden as $Campo){ $Consulta .= $Campo[0] . ' ' . $Campo[1]; $ContaO++; if($ContaO >= 1 && $ContaO <= count($this->_Orden) - 1) $Consulta .= ', '; } } $Consulta .= ';'; // Realizo la consulta $this->_ConsultaFinal = $Consulta; $Fila = $this->_Conexion->query($Consulta); $TotalFilas = $this->_Conexion->affected_rows; if($TotalFilas >= 1){ // Compruebo si hay campos, sino los meto automáticos $info_campo = $Fila->fetch_fields(); if($this->_Ncampos < 1){ foreach ($info_campo as $valor) { $Ancho = round((100/count($info_campo)),2); $this->_Ncampos++; $this->_Campos[$this->_Ncampos][0] = $valor->name; $this->_Campos[$this->_Ncampos][1] = $Ancho.'%'; $this->_Campos[$this->_Ncampos][2] = $valor->name; $this->_Campos[$this->_Ncampos][3] = NULL; } } foreach ($info_campo as $valor) { $CamposTabla[] = $valor->name; } // Muestro la tabla echo $Tabulador.'<table id="Tabla'.$this->_IDTUnico.'" class="Tabla">'.$SaltoLinea; echo $Tabulador.$Tabulador.'<thead>'.$SaltoLinea; if($this->_Paginador or $Buscador){ echo $Tabulador.$Tabulador.$Tabulador.'<tr class="InfoTabla"><td colspan="'.$this->_Ncampos.'">'; // Buscador if($Buscador){ echo '<div class="Buscador"><label>Buscar:</label><input type="text" id="ValorBusqueda'.$this->_IDTUnico.'" name="ValorBusqueda'.$this->_IDTUnico.'" onkeyup="searchTable($(this).val(),\''.$this->_IDTUnico.'\')"><br><input type="button" id="Reinicio'.$this->_IDTUnico.'" name="Reinicio'.$this->_IDTUnico.'"'; if ($this->_Paginador && ($this->_NTotalRegistros > $this->_NumeroRegistros)){ echo ' onClick="Reinicio('.$this->_NTotalRegistros.','.$this->_NumeroRegistros.',\''.$this->_IDTUnico.'\');'; } else { echo ' onClick="Reinicio(null, null,\''.$this->_IDTUnico.'\');'; } echo '" value="Reiniciar filtro" class="BotReini"></div>'; } if($this->_Paginador) echo '<div class="InfoRegistros InfoRegistros'.$this->_IDTUnico.'"></div>'; echo '</td></tr>'.$SaltoLinea; } // Encabezados if ($Encabezados){ echo $Tabulador.$Tabulador.$Tabulador.'<tr>'; foreach ($this->_Campos as $Campo){ $EstiloEncabezado = (!is_null($Campo[1])) ? ' style="width: '.$Campo[1].';"' : ''; $TextoEncabezado = (!is_null($Campo[2])) ? $Campo[2] : $Campo[0]; // echo '<th'.$EstiloEncabezado.' class="Enca" id="NCA'.base64_encode($Campo[0]).'">'.$TextoEncabezado.'</th>'; echo '<th'.$EstiloEncabezado.'><div class="EstadoOrden">'.$TextoEncabezado.'</div></th>'; } echo '</tr>'.$SaltoLinea; echo $Tabulador.$Tabulador.'</thead>'.$SaltoLinea; } // Cuerpo echo $Tabulador.$Tabulador.'<tbody>'.$SaltoLinea; while ($Registro = $Fila->fetch_assoc()){ $Contador++; echo $Tabulador.$Tabulador.$Tabulador.'<tr>'; foreach ($this->_Campos as $Campo){ $TextoSimbolo = (!is_null($Campo[3])) ? ' '.$Campo[3] : ''; if (in_array($Campo[0], $CamposTabla)){ echo '<td>'.$Registro[$Campo[0]].$TextoSimbolo.'</td>'; } else { echo '<td></td>'; } } echo '</tr>'.$SaltoLinea; } // Rellenar con blancos para el limitador /* for($N=$TotalFilas; $N < $this->_NumeroRegistros; $N++){ echo '<tr>'; foreach ($this->_Campos as $Campo){ echo '<td> </td>'; } echo '</tr>'.$SaltoLinea; } */ echo $Tabulador.$Tabulador.'</tbody>'.$SaltoLinea; // Mostrar Controles del paginador if ($this->_Paginador && ($this->_NTotalRegistros > $this->_NumeroRegistros)){ echo '<tfoot>'; echo '<tr class="TRPaginador"><td colspan="'.$this->_Ncampos.'">'; echo "<script>Paginador($this->_NTotalRegistros,$this->_NumeroRegistros,'$this->_IDTUnico');</script>"; echo '<div id="DivPaginador'.$this->_IDTUnico.'" style="margin: auto;"></div><div style="clear:both;"></div>'; echo '</td></tr>'.$SaltoLinea; echo '</tfoot>'; } echo $Tabulador.'</table>'.$SaltoLinea; echo '</div>'.$SaltoLinea; // Le meto las acciones /* echo '<script></script>'; echo '<div id="SalidaTextos"></div>'; */ } else { echo 'El nombre de la tabla no es válido, o esta no contiene datos.'; } } } } ?>
Estructura de la tabla:
- Encabezado en la que se muestra el buscador y la información.
- La cabecera de las columnas.
- El cuerpo de la tabla en la que se muestran los registros.
- Barra de navegación si esta activo el paginador.
Descarga:
Instalación:
- Descomprimir el archivo.
- Agregar en el header.
<link rel="stylesheet" type="text/css" href="Tablas-Basico.css"> <script src="jquery-2.0.0.min.js"></script> <script src="class.tablas.js"></script>
- Seguir el apartado de uso.
Nota: Si ya se tiene metido JQuery tanto el archivo como la línea <script src=“jquery-2.0.0.min.js”></script> se pueden suprimir.
Ejemplo:
Con las opciones básicas:
<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="Lo H@cemos Web"> <meta name="Keywords" content=""> <meta name="Description" content=""> <meta name="Robots" content="INDEX,FOLLOW"> <title>Ejemplo de la clase Tablas</title> <link rel="stylesheet" type="text/css" href="Tablas-Basico.css"> <script src="jquery-2.0.0.min.js"></script> <script src="class.tablas.js"></script> </head> <body> <?php include('class.tablas.php'); $Tabla = new Tablas('NombreTabla', $ConexionMySQLi); $Tabla->Mostrar(); ?> </body> </html>
Y este es el resultado:
Ejemplo con todas las opciones activadas:
Modificaciones
Para cambiar los colores de la tabla sólo hay que modificar el archivo
Tablas-Basico.css