Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

[APORTE]Creacion de tablas dinamicas(MySQL) orientadas a la muestra de datos

Estas en el tema de [APORTE]Creacion de tablas dinamicas(MySQL) orientadas a la muestra de datos en el foro de Frameworks y PHP orientado a objetos en Foros del Web. SQL: http://www.gigasize.com/get.php?d=4ny59fkdbcb Código PHP: <?php class  MySQL {     private  $conexion ;     private  $consulta ;          function  __construct ()     {          $this -> conexion  =  mysql_pconnect ...
  #1 (permalink)  
Antiguo 11/08/2009, 18:23
Avatar de rudy69  
Fecha de Ingreso: octubre-2008
Ubicación: espndeportes.com
Mensajes: 195
Antigüedad: 15 años, 6 meses
Puntos: 7
[APORTE]Creacion de tablas dinamicas(MySQL) orientadas a la muestra de datos

SQL: http://www.gigasize.com/get.php?d=4ny59fkdbcb

Código PHP:
<?php
class MySQL
{
    private 
$conexion;
    private 
$consulta;
    
    function 
__construct()
    {
        
$this->conexion mysql_pconnect('localhost''root''7135052367' );
        if(!
$this->conexion) {
            
$this->error_mysql 'Error en la conexion';
        }
        
mysql_select_db'administracion'$this->conexion) or die ('No se pudo seleccionar la base de datos');
    }
    
    function 
Query($Query)
    {
        
$this->consulta mysql_query($Query$this->conexion) or die (mysql_error());
        if(!
$this->consulta) {
            exit();
        }
    }
    
    function 
fecth_array()
    {
        return 
mysql_fetch_array($this->consulta);
    }

    function 
fetch_assoc()
    {
        return 
mysql_fetch_assoc($this->consulta);
    }
    
    function 
num_row()
    {
        return 
mysql_num_rows($this->consulta);
    }
    
    function 
ultimo_id()
    {
        return 
mysql_insert_id();
    }
}

require_once
'./seguridad.php';
$mysql = new MySQL();

class 
GnTabla extends MySQL
{
    private 
$col           = array();   //var who contain format table
    
public $auto_increment 1;         //by default
    
public $col_sum        = array();   //sum of row type numeric, called by row name
    
public $class_status   'on';      //by default, use('on') or don't('off') a class/style
    
public $class_func;                 //function name of a class/style (function;row_1,row_2,row_3, ...., row_n)
    
public $num_sep        ',';       //by default, separator of thousands
    
public $num_dec        2;         //by default, number of decimal
    
public $head_cont      = array();   //table var-system
    
public $foot_cont      = array();   //table var-system
    
private $class_tbl$align$style//style vars
    
private $num_row;                   //var system
    
    
function style()
    {
        
$class = @func_get_arg(0);
        
$style = @func_get_arg(1);
        
$align = @func_get_arg(2);
        
$this->class_tbl = (!empty($class)) ? ' class="'.$class.'"' NULL;
        
$this->style     = (!empty($style)) ? ' style="'.$style.'"' NULL;
        
$this->align     = (!empty($align)) ? ' align="'.$align.'"' NULL;
    }
    
    public function 
Type($Type)
    {
        
//difined type
        
foreach($Type as $key => $value) {
            
$this->col[$key]['Type'] = $value;
        }
    }
    
    public function 
Header($Key)
    {
        
//difined Header
        
foreach(explode(","$Key) as $key) {
            
$this->col[$key]['Header'] = true;
        }
    }
    
    public function 
Format($Name)
    {
        
//defined table-format
        
foreach($Name as $key => $value) {
            
$this->col[$key]['Name'] = $value;
        }
    }
    
    private function 
PutOrderCol()
    {
        
ksort($this->col); //put in order the array
    
}
    
    public function 
TQuery($query)
    {
        if(!
strpos($query'LIMIT')) {
            
$query    .= ' LIMIT 500';
        }
        
parent::__construct();
        
parent::Query($query);
        
        
$this->num_row parent::num_row();
    }
    
    public function 
Display()
    {
        
/*function que evalua las variables, interpreta los resultados de la base de datos, y finalmente la imprime */
        
        
if($this->num_row == 0) {
            echo 
"<p>No se encontraron resultados</p>\n";
        } else {
            if(
$this->num_row == 500) {
                echo 
'<div style="clear:left;" class="alerta">Los resultados se limitaron a 500</div>'."\n";
            }
            
$this->CreateTable();
        }
    }
    
    private function 
CreateTable()
    {
        
$this->PutOrderCol();
        
        echo 
"<table$this->class_tbl$this->style$this->align>\n";
        
        
$this->Head();
        
        echo 
"    <tbody>\n";
        while(
$datos parent::fetch_assoc()) {
            if(
$this->class_status != 'off') {
                
$class ' class="'//start
                
if(empty($this->class_func)) {
                    
$class .= $class_name = ($class_name == 'even') ? 'odd' 'even';//even and odd have to be style defined
                
} else {
                    list( 
$name_fun$row_fun) = explode(";"$this->class_func);
                    
$c_parameter[] = $class_name;
                    foreach(
explode(","$row_fun) as $col_name) {
                        
$c_parameter[] = $datos[$col_name];
                    }
                    
$class .= $class_name call_user_func_array($name_fun$c_parameter);
                    unset(
$c_parameter);
                }
                
$class .= '"'//end
            
}
            echo 
"    <tr$class>\n";
            foreach(
$this->col as $COL) {
                echo (
$COL['Header']) ? '        <th>' '        <td>';
                if(
$COL['Type'] == 'Text' or empty($COL['Type'])) {
                    echo 
$datos[$COL['Name']];
                } elseif(
$COL['Type'] == 'pre_f') {
                    list( 
$search_replace$text ) = explode("~"$COL['Name']);
                    foreach(
explode(","$search_replace) as $array) {
                        
$str_replace[] = $datos[$array];
                        
$str_search[]  = '@'.$array;
                    }
                    echo 
str_replace($str_search$str_replace$text);
                    unset(
$str_replace);
                    
                } elseif(
$COL['Type'] == 'int') {
                    
$this->col_sum[$COL['Name']] += $datos[$COL['Name']];
                    echo 
number_format($datos[$COL['Name']], 0'.'$this->num_sep);
                } elseif(
$COL['Type'] == 'float') {
                    
$this->col_sum[$COL['Name']] += $datos[$COL['Name']];
                    echo 
number_format($datos[$COL['Name']], $this->num_dec'.'$this->num_sep);
                } elseif(
$COL['Type'] == 'auto_inc') {
                    echo 
$this->auto_increment++;
                } else {
                    foreach(
explode(","$COL['Name']) as $f_parameters) {
                            
$parameters[] = ($datos[$f_parameters] != '') ? $datos[$f_parameters] : $f_parameters;
                            
//if row-name don't exists
                    
}
                    
call_user_func_array($COL['Type'], $parameters);
                    unset(
$parameters);
                }
                echo (
$COL['Header']) ? "</th>\n" "</td>\n";
            }
            echo 
"    </tr>\n";
        }
        echo 
"    </tbody>\n";
        
        
$this->Foot();
        
        echo 
"</table>\n";
        
        
//turn by default
        
unset($this->col$this->class_func$this->class_tbl$this->align$this->style);
        
$this->auto_increment 1;
        
$this->class_status   'on';
        
$this->head_cont      = array();   //table var-system
        
$this->foot_cont      = array();   //table var-system
    
//end function Display()
    
    
private function Head()
    {
        if(!empty(
$this->head_cont)) {
            echo 
"    <thead>\n    <tr>\n";
            foreach (
$this->head_cont as $tmp) {
                echo 
"        <th>$tmp</th>\n";
            }
            echo 
"    </tr>\n    </thead>\n";
        }
    }
    
    private function 
Foot()
    {
        if(!empty(
$this->foot_cont)) {
            echo 
"    <tfoot>\n";
            foreach(
$this->foot_cont as $tmp) {
                echo 
"        <th>";
                echo (empty(
$this->col_sum[$tmp])) ? $tmp $this->col_sum[$tmp];
                echo 
"</th>\n";
            }
            echo 
"    </tfoot>\n";
        }
    }
    
    public function 
caption($caption)
    {
        echo 
"    <caption>$caption</caption>\n";
    }
    
    public function 
Col($col)
    {
        
//formato de variable array( propiedad => array( valores))
        
echo "    <colgroup>\n";
        foreach(
$col as $clave => $valor) {
            
$n 0;
            foreach(
$valor as $tmp) {
                if(!empty(
$tmp)) {
                    
$fila_col[$n++] .= " $clave=\"$tmp\"";
                } else {
                    
$fila_col[$n++] .= '';
                }
            }
        }
        for(
$i 0$i<count($fila_col); $i++) {
            echo 
"    <col$fila_col[$i] />\n";
        }
        echo 
"    </colgroup>\n";
    }
}
?>
<?xml version
="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es">
<link href="/CSS/Tabla.css" rel="stylesheet" type="text/css" />
<head>
</head>
<body>
<?php
function ClassArticulo($class$estado$uni$min) {
    if (
$estado == 'Off') {
        return 
'cancelado';
    } elseif (
$uni == 0) {
        return 
'inexistente';
    } elseif (
$uni <= $min) {
        return 
'proceso';
    } elseif (
$class == 'even') {
        return 
'odd';
    } else {
        return 
'even';
    }
}

//ejemplo #1

$tabla = new GnTabla();
$tabla->style('datos');
$tabla->head_cont = array('','Nombre Barra','Nombre','Unidades','P. Venta','P Compra','Min Existencias','stado');
$tabla->Type(array(=> 'auto_inc'=> 'pre_f'=> 'float'=> 'float'=> 'float'));
$tabla->Header('2');
$tabla->class_func 'ClassArticulo;estado_articulo,unidades,minimo_existencias';
$tabla->Format(array(
    
'',
    
'codigo_barra',
    
'IdArticulo,nombre_articulo~<a href="/administracion/ventas_admin.php?IdArticulo=@IdArticulo">@nombre_articulo</a>',
    
'unidades',
    
'minimo_existencias',
    
'precio_venta',
    
'precio_compra',
    
'estado_articulo'));
$tabla->TQuery('SELECT `IdArticulo`, `codigo_barra`, `nombre_articulo`, `unidades`, `minimo_existencias`, `precio_venta`, `precio_compra`, `estado_articulo` FROM inventario order by IdArticulo DESC');
$tabla->Display();

echo 
"<br>\n";


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//ejemplo #2

$GLOBALS['mysql']->Query("SELECT `IdCompania`, `IdServicio` FROM companias_servicios");
while(
$datos $GLOBALS['mysql']->fecth_array()) {
    
$company[$datos['IdCompania']][$datos['IdServicio']] = true;
}

function 
SeeServ($IdCompany$s) {
    echo (
$GLOBALS['company'][$IdCompany][$s]) ? 'Si' 'No';
}

$tabla->style('datos');
$tabla->head_cont = array(
    
'',
    
'Nombre',
    
'Envio de dinero',
    
'Entrega de dinero',
    
'Pago de bill',
    
'Money order',
    
'Envio de paqueteria',
    
'Recargas electronicas',
    
'Estado');
$tabla->Type(array(
    
=> 'auto_inc',
    
=> 'pre_f',
    
=> 'SeeServ',
    
=> 'SeeServ',
    
=> 'SeeServ',
    
=> 'SeeServ',
    
=> 'SeeServ',
    
=> 'SeeServ'));
$tabla->Header('1');
$tabla->Format(array(
    
'',
    
'IdCompania,nick~<a href="/administracion/companias.php?IdCompania=@IdCompania">@nick</a>',
    
'IdCompania,1',
    
'IdCompania,2',
    
'IdCompania,3',
    
'IdCompania,4',
    
'IdCompania,5',
    
'IdCompania,6',
    
'estado'));
$tabla->TQuery('SELECT `IdCompania`, `nick`, `estado` FROM companias');
$tabla->Display();
?>
</body>
</html>

Última edición por rudy69; 11/08/2009 a las 18:33
  #2 (permalink)  
Antiguo 11/08/2009, 18:28
Avatar de rudy69  
Fecha de Ingreso: octubre-2008
Ubicación: espndeportes.com
Mensajes: 195
Antigüedad: 15 años, 6 meses
Puntos: 7
Respuesta: [APORTE]Creacion de tablas dinamicas(MySQL) orientadas a la muestra de dat

Bajar primero las tablas para que les corran los ejemplos!! e instalarlas y hacer que la clase MySQL les conecte a su BD o les furule :P

Muestra del ejemplo dos: http://hosting.deimagenes.com/imagen...f820f1a17d.JPG

Muestra del ejemplo uno: http://hosting.deimagenes.com/imagen...f5210b0266.JPG

Manual xDDD:
Type es un array que define el tipo de la colunma, existen: text, pre_f, int, float, auto_inc si no es ninguno de estos se toma como el nombre de una function(col_nom1, col_nom2 .... ), tambien acepta valores constantes(no debe ser un nombre de colunma de la BD)
Text: sustituye directamente el valor en la BD directamente.
Int: usa la funcion number_format, para aplicarle formato al resultado
Float: usa la funcion number_format, para aplicarle formato al resultado con decimal
auto_inc: obvio? xD
pre_f: se divide en dos el string por el simbolo "~", al lado izquierdo los nombres de columna de la BD separados por una coma "," y al lado derecho el string, las palabras a sustituir se identifican: el nombre de columna con el signo de "@" al inicio ejem: @nombre_col
Format es un array, que contiene los datos a mostrar columna por columna sustituyendo el valor por el que se encuentra en la base de datos, como? usando el nombre de la colunma en la BD como identificador

es sumamente dificil de explicar pero de facil uso una vez entendido, en mi caso me ayuda mucho, me sirve mucho cuando necesitas imprimir muchas tablas mostrando datos de la BD

esta hecha con el unico fin de mostrar datos en forma de tabla de una BD,


podes agregar este codigo para el formato de las tablas, tmb podes agregar stylos, o los podes desactivar, el uso de paginacion en este caso seria externo, uff mucho, la hice especialmente para mi, pero la he querido compartir espero que les sirva al menos a uno XDDDDD, si les interesa mas puedo hablar, preguntas xDD??
Código HTML:
<style>
table.datos {
  border-collapse: collapse;
  border: 1px solid #03476F;
  font: normal 11px verdana, arial, helvetica, sans-serif;
  color: #363636;
  }
caption.datos {
  text-align: center;
  font: bold 18px arial, helvetica, sans-serif;
  background: transparent;
  padding:6px 4px 8px 0px;
  color: #03476F;
  text-transform: uppercase;
  }
.datos td, th {
  border: 1px dotted #03476F;
  padding: .4em;
  color: #363636;
  }

thead th, tfoot th {
  font: bold 11px verdana, arial, helvetica, sans-serif;
  border: 1px solid #03476F;
  text-align: center;
  background: #4591AD;
  color: #FFFFFF;
  padding-top:3px;
  }
tbody th {
  font: bold 11px verdana, arial, helvetica, sans-serif;
  text-align: left;
  color: #363636;
  }
tbody td a {
  background: transparent;
  text-decoration: none;
  color: #363636;
  }
tbody th a {
  font: normal 11px verdana, arial, helvetica, sans-serif;
  background: transparent;
  text-decoration: underline;
  font-weight: bolder;
  color: #363636;
  }
tbody th, tbody td {
  vertical-align: top;
  }
tfoot td {
  border: 1px solid #03476F;
  background: #4591AD;
  padding-top:3px;
  color: #FFFFFF;
  }
tbody .even {
  background: #D5E7FB;
  }
tbody .odd {
  background: #E8F2FC;
  }
tbody .proceso {
  background: #669933;
  }
tbody .off {
  background: #FFFFFF;
  }
tbody .cancelado {
  background:  #FF3300;
  }
tbody tr.proceso:hover,
tbody tr.cancelado:hover,
tbody tr.even:hover,
tbody tr.odd:hover {
  background: #E0FAC5;
  color: #FFFFFF;
  }
</style> 

Última edición por rudy69; 11/08/2009 a las 18:41
  #3 (permalink)  
Antiguo 16/08/2009, 04:19
 
Fecha de Ingreso: agosto-2009
Mensajes: 247
Antigüedad: 14 años, 8 meses
Puntos: 10
Respuesta: [APORTE]Creacion de tablas dinamicas(MySQL) orientadas a la muestra de dat

Se ve barbaro..... muchas gracias!
  #4 (permalink)  
Antiguo 22/11/2011, 14:01
 
Fecha de Ingreso: noviembre-2011
Mensajes: 1
Antigüedad: 12 años, 5 meses
Puntos: 0
Respuesta: [APORTE]Creacion de tablas dinamicas(MySQL) orientadas a la muestra de dat

no pude descargar la base de datos si me la pudieras mandar para probar el codigo seria lo mejor
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 03:26.