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&oacute;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&aacute; en el encabezado.</td>
          <td class="col1">String</td>
          <td class="col2">Opcional</td>
      </tr>
      <tr class="row6">
          <td class="col0">Agrega un s&iacute;mbolo a continuaci&oacute;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&uacute;n el n&uacute;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&oacute;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&uacute;n los m&eacute;todos utilizados anteriormente.<br />
          <strong>Nota:</strong> Muestra Los encabezados y el buscador, seg&uacute;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>&nbsp;</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:

  1. Encabezado en la que se muestra el buscador y la información.
  2. La cabecera de las columnas.
  3. El cuerpo de la tabla en la que se muestran los registros.
  4. 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


Navegación

<html><a href=“/softwareprogramacion”>Software de programación</a></html>

Ayuda al servidor