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

Clase - Data Grid

Estas en el tema de Clase - Data Grid en el foro de Frameworks y PHP orientado a objetos en Foros del Web. VER ULTIMA VERSION DISPONIBLE manual Hola como estan foreros, desde hace tiempo he desarrollado diversas paginas en las cuales siempre me TOCA (y no esta ...
  #1 (permalink)  
Antiguo 08/07/2009, 23:34
Avatar de acoevil  
Fecha de Ingreso: julio-2008
Ubicación: localhost/colombia/sevillaValle.php
Mensajes: 1.123
Antigüedad: 16 años, 3 meses
Puntos: 32
Clase - Data Grid

VER ULTIMA VERSION DISPONIBLE


manual


Hola como estan foreros, desde hace tiempo he desarrollado diversas paginas en las cuales siempre me TOCA (y no esta mal) usar bases de datos para mostrar informacion a nuestros usuarios de una forma adecuada, pero resulta que muchas veces es mucha la informacion que toca mostrar, y siempre es maluco estar digitando practicamente el mismo codigo para poder hacerlo.

Algo como esto

Código PHP:
$usuarios mysql_query"select * from usuarios" ); 
Y esto

Código PHP:
 while( $row mysql_fetch_assoc$usuarios  )  )

{
/*...*/
Ahora solo imaginen cuando tienen que hacer muchos mas de estos para poder mostrar la informacion que necesitan, por lo menos para mi se vuelve algo maluco y muy repetitivo, por eso existe algo que se lllaman Data Grids

¿ Que es un data grid ?

Un data grid, que viene a significar en castellano rejilla de datos, es una interfaz de usuario bastante típica, que sirve para visualizar información en una tabla. La información suele ser un conjunto de registros, y se suelen mostrar cada uno de ellos en una fila. Además, los data grid suelen tener integradas funcionalidades para la ordenación de los datos y opciones para su edición o borrado entre muchas mas.

Logicamente, yo se que existen numerosas clases que hacen esto pero yo hize con mis propias funcionalidades,


Bueno entremos a lo que nos interesa

Tenemos la sgte bases de datos que tiene la sgte tabla y necesitamos mostrarla al usuario.


http://www.cuelgalo.com/viewer.php?id=1247114395_1.JPG

Ahora lo que tenemos que hacer es mostrar la informacion utlizando la clase

Primero que todo creamos una conexion hacia la base de datos
Código PHP:
$conexion mysql_connect("localhost""root","");
mysql_select_db("ejemplo"$conexion); 
Segundo incluimos la clase al archivo actual ya se a con include o require

Tercero, tenemos que crear una instancia de la clase

Código PHP:
$grid Aco_DataGrid::instancia(); 
Cuarto, creamos una variable que que va a contener la consulta a la base de datos, yo la tengo asi.

Código PHP:
$sql "select codigo,nombre,pcompra,pventa,cantidad from productos"
NOTA: Cuando indiquen la consulta y utilizan un alias as es el que deberan utilizar mas adelante...

Quinto, creamos un array asociativo donde se indica el titulo de la columna y el campo de la base de datos.


Código PHP:
$campos = array( 
'codigo' => 'codigo',
 
'nombre' => 'nombre',
 
'Precio de compra' => 'pcompra',
 
'Precio de venta' => 'pventa',
 
'Cantidad' => 'cantidad'  ); 

Y sexto, llamamos al metodo confCampos que recibe 3 parametros

Código PHP:
// $sql -> la consulta a la base de datos
// $conexion -> Indica la conexion con la base de datos
// $campos -> Indica los campos que se utilizaran para mostrar en el grid
$grid->confCampos($sql$conexion$campos); 

LISTO!! ahora tenemos nuestra informacion ordenada en un data Grid, como se muestra en el sgte enlace

http://www.cuelgalo.com/viewer.php?id=1247115369_2.JPG

Pero resulta que mostrar la informacion sin algun tipo de color seria muy feo, por eso he creado metodos que permiten mejorar mucho la apariencia...

El metodo grid_BgColorFC recibe como primer parametro un String que indica el color del que tendran los titulos en las columnas, y como segundo parametro un array de colores que indican el color que tendra cada fila, la cantidad de colores puede ser cualquiera...
Código PHP:

$colores 
= array ( '#F0F9FC''#FFFFFF' );
 
$grid->grid_BgColorFC'#FFFFFF'$colores ); 

Ahora tenemos algo asi

http://www.cuelgalo.com/viewer.php?id=1247116045_3.JPG

Resulta que el contenid de las tablas esta muy pegado entre si, entonces tenemos un metodo para solucionarlo.

Código PHP:
$grid->grid_PacingAndPadding(33); 
Como vemos es el famoso cellspacing y cellpadding

Ahora tenemos algo un poco mas ordenado

http://www.cuelgalo.com/viewer.php?id=1247116241_4.JPG


Ahora por ejemplo necesitamos crear una nueva columna para poder editar
informacion de esa base de datos...

Muy simple

La clase tiene metodos que te permiten agregar una columna, quitar una columna, indicarle la ubicacion de la columna y el contenido que deberia llevar



Todos estos y muchos mas metodos se encuentran disponibles en la clase, la cual sera actualizada constantemente para agregar nuevas funcionalidades y de la misma manera optimizar mas y mas el codigo, si tienes alguna idea como una funcionalidad extra q deberia tener me pueden decir y juntos mejoraremos el codigo...


Aqui muestro como se veria el grid con un poco mas de trabajo


http://www.cuelgalo.com/viewer.php?id=1247117421_5.JPG

Última edición por acoevil; 16/11/2009 a las 14:16
  #2 (permalink)  
Antiguo 08/07/2009, 23:37
Avatar de acoevil  
Fecha de Ingreso: julio-2008
Ubicación: localhost/colombia/sevillaValle.php
Mensajes: 1.123
Antigüedad: 16 años, 3 meses
Puntos: 32
Respuesta: clase- Data Grid

Aqui podemos ver el codigo.....

Código PHP:
<?php
/**
 * 
 * Aco_dataGrid - Version 1.0  BETA
 * http://www.forosdelweb.com/miembros/acoevil/
 * sebastian80_23 arroba hotmail.com  
 * 
 *
 *¿ Que es un data grid ?
 *
 *Un data grid, que viene a significar en castellano rejilla de datos, es una interfaz de usuario bastante típica,** *que sirve para visualizar información en una tabla. La información suele ser un conjunto de registros, y se suelen *mostrar cada uno de ellos en una fila. Además, los data grid suelen tener integradas funcionalidades para la       *ordenación de los datos y opciones para su edición o borrado entre muchas mas. 
 * 
 * 
 * 
 * */      
class Aco_DataGrid
{
    
//Singleton
    /**
     *Instancia de la clase
    *@var object Instancia de la clase
     * @access private      
     */    
    
private static $instancia;
    
/**
     *Sql del usuario
    *@var String Sql del usuario
     *@access private      
     */    
    
private $sql;
    
/**
     *Campos que seran seleccionados de (  $sql  )
    *@var array con los campos que seran seleccionados
     *@access private      
     */        
    
private $campos=array();
    
    
/**
     * Conexion a la db
    *@var Conexion  de la db
     *@access private      
     */        
    
private $conexion
    
/**
     * Un array asociativo que contiene informacion de los campos de la db 
     *@var array
    *@access private
    */  
    
private $arrayCampos = array();
         
    
//    Las sgtes son atributos del grid
    
private $cellpadding 0;
    private 
$cellspacing 0;
    private 
$width 0;
    private 
$height 0;
    private 
$bgColor = array('#FFFFFF');
    private 
$bgColorTh '#FFFFFF';
    private 
$bgColorTabla '#FFFFFF';
    private 
$border 0;
    private 
$borderColor '#FFFFFF';
    private 
$background '';
    private 
$align 'center';
    
    
/**
     *Las sgtes controlan las filas agregadas por encima y debajo del grid 
     */        
    
private $contenidoF;
    private 
$alignF;
    private 
$colspanF;
    
    private 
$rem_columna = array();    
     
    
    private function 
__construct()
    {
        
    }
    
    
//Singleton
    /**
     *@copyright Acoevil.
     */     
    
public static function instancia()
    {
        if ( ! isset(
self::$instancia) ) {
            
            
$nombreClase __CLASS__;
            
self::$instancia = new $nombreClase;
        }
        
        return 
self::$instancia;
    }
    
    
//Singleton
    
public function __clone()
    {
        
trigger_error("No se permite clonar"E_USER_ERROR);
    }
    
/**
     * Permite indicar los campos que seran procesados de la consulta (  $sql  )
    *   
     * @param String $sql Consulta Sql indicada
     * @param Recurso de la conexion de la base de datos
     * @param array Array asociativo que indica el titulo de la fila y el nombre del campo de la base de datos             */      
    
    
public function confCampos$sql$conexion$campos  )
    {
        
$this->sql $sql;        $this->conexion $conexion;        $this->campos $campos;
        
        
$consulta mysql_query$this->sql$this->conexion ) or die ( mysql_error() );
        
        foreach ( 
$campos as $key => $valor ) {
            
            while ( 
$fila mysql_fetch_assoc($consulta) ) {
                
                
                $
$valor .= $fila$valor ] . ',';
                                        
            }
            
//Se elimina la ultima coma ( , )
            
$$valor substr( $$valor0strlen( $$valor )-);
            
$this->arrayCampos$key ] =  $$valor;
            $
$valor '';
            
mysql_data_seek($consulta0);
                
        }
        
        
    }
    
/**
     * Permite organizar el valor de los arrays quitando la coma (  ,  ) que diferencia cada campo de la db 
     * 
      *@return array Retorna un array con cada uno de los valores del campo     
     *@param array Un array asociativo que contiene el (  nombre del campo )  y el (  valor  ) 
     */      
    
private function _explodeC$array )
    {
        return 
explode(','$array);
        
    }
    private function 
_explorador$ruta''$camposEscogido '' )
    {
        
//Se quitan las comas ( , ) 
         
$filas $this->_explodeC$this->arrayCampos$camposEscogido ] );
        
$nombreEnlace $filas;
        
$nuevoEnlace = array();
        
                
        for( 
$n=0$n count$filas ); $n++  ) {
            
            
// Primero se reemplazan todas las apariciones de (  {...}  ) por el valor correspondiente del array
            //Ejem: <a href="index.php?id={}">()</a>  -> Como resultado <a href="index.php?id=1">()</a>
            //Dependiendo del valor que se encuentre en el array                            
            
$filas$n ] = preg_replace'/\{.*?\}/',  urlencode$filas$n ] ), $ruta );
            
// Despues se reemplazan todas las apareiciones de ( [...] ) por el valor correspondiente del array
            
$filas$n ] = preg_replace'/\(.*?\)/'$nombreEnlace$n ] , $filas $n ] );
            
            
//Se generan nuevamente las comas ( , )
            
$nuevoEnlace] .= $filas$n ] . ',';             
        }
        
//Se elimina la ultima coma (  ,  )
        
$nuevoEnlace substr$nuevoEnlace], 0strlen$nuevoEnlace] )-);
        
        return 
$nuevoEnlace;
    }
    
    
/**
     * 
      *@return array Retorna un array con las comas ( , )     
     *@param String Q indica que indice del array tiene que utilizar.
     */      
     
public function add_InfoAcampo$contenido ''$camposEscogido '')
     {
         
            
$nuevoElemento $this->_explorador$contenido$camposEscogido );
            
            
$this->arrayCampos$camposEscogido ] = $nuevoElemento;                 
     }
     
/**
     *Permite añadir una nueva columna antes de una columna especificada  
     *
     * @param String contenido Indica el tipo de contenido que se quiere agregar
     * @param String campoEscogido indica el campo desde donde se obtiene el contenido
     * @param String antesDe indica en donde sera la ubicacion del nuevo contenido en el grid
     */
       
     
public function add_ColumnaAntesDe$contenido$campoEscogido$antesDe$titulo 
     {
         
             
$nuevoElemento $this->_explorador$contenido$campoEscogido );
             
$nuevoCampo = array();
             
             
             foreach( 
$this->arrayCampos as $key => $valor ) {
                
                if( 
$antesDe == $key ) {
                    
                    
$nuevoCampo$titulo ] = $nuevoElemento;
                    
each$nuevoCampo );
                 }
                
                
$nuevoCampo$key ] = $valor;
                    
            }
                    
        
$this->arrayCampos $nuevoCampo;
                
     }
     
/**
     *Permite añadir una nueva columna despues de una columna especificada  
     *
     * @param String contenido Indica el tipo de contenido que se quiere agregar
     * @param String campoEscogido indica el campo desde donde se obtiene el contenido
     * @param String despuesDe indica en donde sera la ubicacion del nuevo contenido en el grid
     */
     
     
public function add_ColumnaDespuesDe$contenido$campoEscogido$despuesDe$titulo )
     {
             
$nuevoElemento $this->_explorador$contenido$campoEscogido );
             
$nuevoCampo = array();
             
             
             foreach( 
$this->arrayCampos as $key => $valor ) {
                 
                 
$nuevoCampo$key ] = $valor;
                 
                 if( 
$despuesDe == $key ) {
                    
                    
$nuevoCampo$titulo ] = $nuevoElemento;
                    
                }
                 
             }
             
             
        
$this->arrayCampos $nuevoCampo;        
        
     }
     
/**
     *Permite crear una fila por encima del grid, se puede utilizar para darle una descripcion al grid 
     * @param String contenido, indica el contenido que se visualizara en la nueva fila
     * @param String align, indica la posicion del contenido, ( por defecto se ubica en el centro )
     * @param String colspan, indica la cantidad de columnas que abarcara la nueva fila, ( por defecto son todas )
     */
       
     
public function add_FilaArriba$contenidoF$alignF 'center'$colspanF null )
     {
         
$this->contenidoF $contenidoF;
         
$this->alignF $alignF;
         
$this->colspanF = ( $colspanF==null count$this->arrayCampos ) : $colspanF );
        
        return 
$this;     
          
        
     }
  #3 (permalink)  
Antiguo 08/07/2009, 23:37
Avatar de acoevil  
Fecha de Ingreso: julio-2008
Ubicación: localhost/colombia/sevillaValle.php
Mensajes: 1.123
Antigüedad: 16 años, 3 meses
Puntos: 32
Respuesta: clase- Data Grid

Código PHP:
/**
     *Permite remover columnas que no se deseen mostrar
     * 
     *@param array Un array que indica las columnas que no se deben mostrar, se utiliza el mismo titulo de la 
     *       columna para especificar las que no se quieren ver  Eje:  array( 'titulo', 'titulo2' );     
     * 
     */  
     
public function rem_columna$columna = array('') )
     {
         
// Almacenara las nuevas columnas disponibles
        
$nuevoElemento = array();
        
        
        foreach( 
$this->arrayCampos as $key => $valor ) {
            
            
$si false;                        
            
            for( 
$n=0$n count$columna ); $n++ ) {
                
                if( 
$key == $columna$n ] ) {
                    
                    
$si true;

                } 
            }
            
            if( ! 
$si ) {
                                
                
$nuevoElemento$key ] = $valor;
            }
            
            
        }
        
        
        
$this->arrayCampos $nuevoElemento;    
        
     }
     
/**
     * Permite indicar el cellspacing y cellpadding 
     *@param cellspacing
     *@param cellpadding 
     */
     
public function grid_PacingAndPadding$cellspacing$cellpadding )
     {
         
$this->cellspacing $cellspacing;
         
$this->cellpadding $cellpadding;
         
        return 
$this;                  
     }
     
/**
     * Indica los colores de filas y columnas, ademas se puede indicar la manera como seran aplicados
     *  
     * @param String Indica el primer color que tendra el titulo de cada columna
     * @param array Un array de colores  hexadecimales 
     * @param true o false 
     */
     
public function grid_BgColorFC$colorTagTh$colores )
     {
        
$this->bgColor $colores;
        
$this->bgColorTh $colorTagTh;
        
        return 
$this;
     }
     
/**
     *Define tanto la anchura como altura del grid
     * @param int width - Define la anchura del grid en pixels o porcentaje. 
     * @param int height - Define la altura del grid en pixels o porcentaje.
     */
     
public function grid_WidthAndHeight$width$height )
     {
        
$this->width $width;
        
$this->height $height;
        
        return 
$this;
     }
     
/**
     * Define el border, borderColor, background y align del grid
     * @rapam int border Define el número de pixels del borde principal.
     * @param String borderColor Define el color del borde.
     * @param String bgcolor da color de fondo a la tabla. 
     * @param String background Nos permite colocar un fondo para la tabla a partir de un enlace a una imagen.
     * @param String align Alinea horizontalmente la tabla con respecto a su entorno.  
     */
     
public function grid_AtributosTabla$border$borderColor$bgColor$background$align )
     {
         
$this->border $border;
         
$this->borderColor $borderColor;
         
$this->bgColorTabla $bgColor;
         
$this->background $background
         
$this->align $align;
         
         return 
$this;        
     }
     
     public function 
gridMostrar()
     {
         
         
$datos = array();
              
          echo 
'
         <table align="' 
$this->align '" border="' $this->border '"
         bordercolor="' 
$this->borderColor '" background="' $this->background '" 
         cellspacing="' 
$this->cellspacing '" cellpadding="' $this->cellpadding '" 
         bgcolor="' 
$this->bgColorTabla '">';
         
         
// Con lo sgte se genera la nueva fila ( si el usuario lo indica )
         
if ( ! empty( $this->contenidoF ) ) {
            
            echo
            
'
            <tr><td colspan="' 
$this->colspanF '" align="' $this->alignF '">'$this->contenidoF .'</td></tr>
            '
;
        } 
        
        echo 
"<tr bgcolor="$this->bgColorTh .">";
        
// Se generan los <th>
        
foreach ( $this->arrayCampos as $key => $valor ) {
            
            echo 
"<th align=\"center\" width=" $this->width " height=" $this->height ">" $key "</th>";
            
            
$datos$key ] = $this->_explodeC$this->arrayCampos$key ] );    
            
            
$iteraciones count$datos$key ] );    
        }
        echo 
"</tr>";
        
        
        
$v 0;
        
$tam count$this->bgColor );
        
// Se generan los td con los resultados de la Bds
        
for ( $n=0$n $iteraciones$n++ ) {
            
            
/**
             * Si ( v ) es igual al tamaño del array de colores 
            *lo reinicio en 0 de lo contrario sigue con el mismo valor
             */     
            
$v = ( $v == $tam $v );
        
                
            echo 
"<tr bgcolor=" $this->bgColor$v ] . ">";
            
            foreach ( 
$this->arrayCampos as $key => $valor ) {
            
            echo 
"<td align=\"center\"> " $datos$key ][ $n ] . "</td>";
        
            }
            
            echo 
"</tr>";
            
            
$v++;
            
        }
        echo 
"</table>";
        
     }                  


  #4 (permalink)  
Antiguo 09/07/2009, 13:24
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Clase - Data Grid

Tema trasladado desde PHP General
  #5 (permalink)  
Antiguo 09/07/2009, 13:46
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Clase - Data Grid

buen trabajo, me gusto el resultado...

__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #6 (permalink)  
Antiguo 13/07/2009, 12:38
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 7 meses
Puntos: 292
Respuesta: Clase - Data Grid

Me gustó MUCHO pero tengo una duda y es porque se permite una sola instancia (?)
__________________
Salu2!
  #7 (permalink)  
Antiguo 14/07/2009, 20:12
Avatar de acoevil  
Fecha de Ingreso: julio-2008
Ubicación: localhost/colombia/sevillaValle.php
Mensajes: 1.123
Antigüedad: 16 años, 3 meses
Puntos: 32
Respuesta: Clase - Data Grid

Q tal Italico76 es que yo utilizo un patron de diseño llamado Singleton, puedes encontrar mas informacion en este link

http://es.wikipedia.org/wiki/Singleton
  #8 (permalink)  
Antiguo 14/07/2009, 21:02
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Clase - Data Grid

Cita:
Iniciado por acoevil Ver Mensaje
Q tal Italico76 es que yo utilizo un patron de diseño llamado Singleton, puedes encontrar mas informacion en este link

http://es.wikipedia.org/wiki/Singleton
tal ves la pregunta era....

¿¿si yo quiero tener varios grids en una sola pagina??

¿¿es posible, y como se hace...??
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 15/07/2009, 15:56
Avatar de acoevil  
Fecha de Ingreso: julio-2008
Ubicación: localhost/colombia/sevillaValle.php
Mensajes: 1.123
Antigüedad: 16 años, 3 meses
Puntos: 32
Respuesta: Clase - Data Grid

Q tal Italico76 me has hecho caer en cuenta que al utilizar el patron de diseño singleton ( que por sierto aprendi hace muy poco jeje ) tengo problemas al tratar de crear mas de un Grid en la misma pagina ya que solo permite una unica instancia...

Entonces pensaba que seria bueno eliminar este patron y permitir crear mas instancias para no tener problemas... esto puede que se a una salida facil pero creo que es la mejor o que piensas tu ? o que piensan los demas sobre esto ?....

Igualmente se puede modificar para que permita mas grids en la misma pagina y no es muy duro... pero esto implicaria la creacion de nuevos metodos que arian al script mas complejo y duro de mantener... sabiendo que lo solucionaria quitando el patron Singleton...

La idea es seguir mejorando esta clase para que funcione de manera optima en nuestros desarrollos...


Ooo se me olvidaba... he actualizado la clase, ahora permite ordenar la informacion desplegada ya se ha por nombre, codigo etc asi como lo hace foros del web... apenas estemos de acuerdo en esto de varios grids en la misma pagina, les paso el link para que descarguen la nueva version xD...

Gracias por comentar...
  #10 (permalink)  
Antiguo 15/07/2009, 16:29
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 7 meses
Puntos: 292
Respuesta: Clase - Data Grid

acoevil: celebró las rapidas actualizaciones de tu clase :)

Sobre el Singleton,.. yo lo sacaria pero es mejor esperar a que otros foristas mas experimentados (Pate, GatorV,..) den su opinion
__________________
Salu2!
  #11 (permalink)  
Antiguo 15/07/2009, 16:33
Avatar de acoevil  
Fecha de Ingreso: julio-2008
Ubicación: localhost/colombia/sevillaValle.php
Mensajes: 1.123
Antigüedad: 16 años, 3 meses
Puntos: 32
Respuesta: Clase - Data Grid

Si, estoy completamente de acuerdo con lo que dices...

Salu2
  #12 (permalink)  
Antiguo 15/07/2009, 21:16
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Clase - Data Grid

En efecto la forma es quitando el patrón Singleton, ya que con Singleton solo tienes una instancia global de la clase y si el requerimiento es poner varios Grids en una pagina tienes que quitarlo.

Te dejo unos ejemplos: http://code.google.com/p/geckotoolbo...o/DataGrid.php http://code.google.com/p/geckotoolbox/wiki/DataGrid a la clase DataGrid que yo uso, tengo separado toda la parte grafica (usando el patrón decorator) de lo que es la fuente de datos para una mejor abstracción.

Saludos.
  #13 (permalink)  
Antiguo 15/07/2009, 21:29
Avatar de acoevil  
Fecha de Ingreso: julio-2008
Ubicación: localhost/colombia/sevillaValle.php
Mensajes: 1.123
Antigüedad: 16 años, 3 meses
Puntos: 32
Respuesta: Clase - Data Grid

Ok.. muchas gracias por la explicacion GatorV
  #14 (permalink)  
Antiguo 20/07/2009, 17:08
Avatar de acoevil  
Fecha de Ingreso: julio-2008
Ubicación: localhost/colombia/sevillaValle.php
Mensajes: 1.123
Antigüedad: 16 años, 3 meses
Puntos: 32
Respuesta: Clase - Data Grid

Hola esta es la nueva version de la clase...

Version 1.2 BETA


Se agrega...
  • Se agrega la posibilidad de ordenar la informacion de forma asc o desc
  • Se agrega la posibilidad de crear multiples grids en una misma pagina
  • Se agrega el metodo $this->rem_SortAcolumna la cual permite quitarle el ( sort ) a una columna
  • Se agrega la posibilidad de hacer callback a una columna del Grid

Ademas de las otras funcionalidades como agregar columnas, removerlas etc


Aqui tienen el link para descargarla... LINK

Tambien inclui la documentacion generada por phpDocumentor...

Si desean ver el codigo aqui con mucho gusto lo pongo, igualmente si desean ayuda de como usarla...

constantemente estare sacando nuevas versiones donde ire corrigiendo errores =)

Última edición por acoevil; 20/07/2009 a las 17:55
  #15 (permalink)  
Antiguo 20/07/2009, 17:49
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 7 meses
Puntos: 292
Respuesta: Clase - Data Grid

Cita:
Iniciado por acoevil Ver Mensaje
Se agrega...
  • Se agrega la posibilidad de ordenar la informacion de forma asc o desc
  • Se agrega la posibilidad de crear multiples grids en una misma pagina
  • Se agrega la funcion $this->rem_SortAcolumna la cual permite quitarle el ( sort ) a una columna
  • Se agrega la posibilidad de hacer callback a una columna del Grid
WOW,.. cuantas cosas

Solo recuerda que son "metodos" (no funciones) y que rem_SortAcolumna tiene como dices notacion de "funcion" pero como es un metodo deberia llamarse remSortAcolumna (sin guion bajo)
__________________
Salu2!
  #16 (permalink)  
Antiguo 20/07/2009, 17:59
Avatar de acoevil  
Fecha de Ingreso: julio-2008
Ubicación: localhost/colombia/sevillaValle.php
Mensajes: 1.123
Antigüedad: 16 años, 3 meses
Puntos: 32
Respuesta: Clase - Data Grid

jeje si lo se que son metodos no se porque me equivoque lo de quitar el guion lo uso para identificar metodo privados... los metodos publicos los dejo normales sin el guion bajo al principio...

Ejemplo

convert_text() // public method
_convert_text() // private method

Mira puedes leer esto

http://framework.zend.com/manual/en/...ing-style.html

y este

http://codeigniter.com/user_guide/ge...tyleguide.html

Salu3 y gracias por comentar
  #17 (permalink)  
Antiguo 20/07/2009, 18:38
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Clase - Data Grid

estoy de acuerdo, las convenciones son muchas...

Código:
lowerCamelCase()
UpperCamelCase()
lower_under_score()
_private_under_score()
etc, etc... lo mejor es adaptarse a una, y no a varias... no hay un mejor, o excelente ya que eso no afecta (ni deberia) el desempeño del programador...


personalmente yo solo uso lower_under_case() eso se me va bien, y ya me acostumbre... ni modo!!

jeje....
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Última edición por pateketrueke; 20/07/2009 a las 18:45
  #18 (permalink)  
Antiguo 30/08/2009, 20:01
Avatar de acoevil  
Fecha de Ingreso: julio-2008
Ubicación: localhost/colombia/sevillaValle.php
Mensajes: 1.123
Antigüedad: 16 años, 3 meses
Puntos: 32
Respuesta: Clase - Data Grid

Holas q tal saque una nueva version de la clase, espero les guste


Version 1.3
  • Se mejora el mensaje en las llamadas a los callbacks cuando este no se encuentra bien definido...
  • El metodo privado _thSort fue modificado
  • Ya no es obligatorio definir la conexion hacia la bd, de igual forma se puede definir si se requiere otra conexion..
  • El grid es capaz de crear un ID para la tabla.
  • Se corrigieron fallos en el uso de multiples grids en una misma pagina...
  • Ahora tiene un paginador, totalmente configurable

Cualquier pregunta, sugerencia o amenaza estare disponible


Aqui pueden bajar la ultima version DESCARGAR


Aqui les dejo un ejemplo sencillo de como usar el dataGrid...



Código PHP:

require_once 'dataGrid.php';

// Conexion
$conexion mysql_connect("localhost""root","");
mysql_select_db("empresa"$conexion);

// La informacion que queremos en el grid
$sql "select * from productos";
$campos = array('codigo' => 'codigo',
                
'nombre' => 'nombre',
                
'pcompra' => 'pcompra',
                
'pventa' => 'pventa');
                
// Se crea la instancia del grid
$grid = new Aco_DataGrid$sql$conexion$campos'productos' );

// Aqui se configuran algunas cosas de apariencia del grid
// Hay muchos metodos utiles en la clase
$colores = array ( '#E5EECC''#333333' );
$grid->grid_BgColorFC('#FFFFFF'$colores);
$grid->grid_PacingAndPadding5);

// Se hace uso de paginador
$grid->grid_Pagina(103);

// Mostrarmos el grid
$grid->gridMostrar(); 
De esta sencilla forma mostrariamos informacion de nuestra base de datos sin complicarnos la vida...

Si tienes alguna duda sobre el uso de la clase, me pueden enviar un Mensaje privado, o escribirme a

[email protected]

manual

Última edición por acoevil; 16/11/2009 a las 08:41
  #19 (permalink)  
Antiguo 16/11/2009, 09:00
Avatar de acoevil  
Fecha de Ingreso: julio-2008
Ubicación: localhost/colombia/sevillaValle.php
Mensajes: 1.123
Antigüedad: 16 años, 3 meses
Puntos: 32
Respuesta: Clase - Data Grid

Q tal, aqui esta la version 1.4 de la clase, con mas metodos interesantes, y correcciones

Version 1.4
  • El grid, ahora es capaz de crear un nombre si no se le asigna uno antes
  • Se agrega la funcion add_FilaAbajo() que permite colocar una nueva fila al final de la tabla
  • Se agrega el metodo add_Relacion() para hacer relaciones
  • Se corrigen errores en la paginacion, cuando hay multiples grids
  • Se agrega el metodo add_SortAColumna() que permite que una o mas columnas se puedan ordenar ASC o DESC

Estas y otras importantes modificaciones fueron realizadas.

El metodo add_Relacion() tiene muchos usos uno de ellos por ejemplo, imaginemos que tenemos una columna llamada Estado dentro de una tabla empleados, y estos estados despliegan informacion como por ejemplo 1 o 0 varias veces, la idea es que no salga 1 ni 0, si no activo e inactivo, entonces hay entra el nuevo metodo.

add_Relacion( $relaciones = array() )

Creamos un array indicando la columna la cual queremos ir a buscar el valor que queremos cambiar

Código PHP:
$relaciones = array( 'Estado' => array('1' => 'Activo''0' => 'Inactivo') );

add_Relacion$relaciones ); 
De esa sencilla forma los valores desplegados por la columna Estado pueden ser cambiados.

Aqui pueden descargar la ultima version VERSION 1.4


Salu2 a todos.
__________________
Como presentar nuestros datos por medio de tablas . clase Aco_DataGrid Version 1.4
  #20 (permalink)  
Antiguo 13/06/2011, 06:15
 
Fecha de Ingreso: junio-2011
Ubicación: Venezuela
Mensajes: 53
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: Clase - Data Grid

Hola acoevil. Esta clase se puede utilizar para generar reportes en PDF ?.
  #21 (permalink)  
Antiguo 17/05/2012, 17:40
 
Fecha de Ingreso: marzo-2009
Ubicación: Montevideo, Uruguay
Mensajes: 5
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Clase - Data Grid

Hola me puede dar una mano.. no me sale soy novato.
  #22 (permalink)  
Antiguo 17/05/2012, 17:41
 
Fecha de Ingreso: marzo-2009
Ubicación: Montevideo, Uruguay
Mensajes: 5
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Clase - Data Grid

Hola quien me puede ayudar.. hago los mismo paso pero no me sale alguien me da una mano soy novato.
  #23 (permalink)  
Antiguo 19/07/2012, 10:40
 
Fecha de Ingreso: julio-2012
Mensajes: 1
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: Clase - Data Grid

Hola, me encuentro haciendo un listado con Aco_datagrid de php, todo va de maravila pero lo único que quisiera saber es como crear un campo editar para la fila que quiero editar y borrar dicha fila.
hasta aqui he llegado:

<?php
require_once 'Aco_DataGrid.php';
$conexion =mysql_connect('localhost','enfecasa_calitos','CAL ITO1971');

mysql_select_db('enfecasa_CLIENTES',$conexion);
?><?php
// Conexion
$sql = 'select * from Egresos';

$campos = array('ID' => 'ID_movimiento',
'Fecha Egreso' => 'Fecha',
'Tipo Operación' => 'Tipo_movimiento',
'Móvil' => 'Movil',
'Kit' => 'Kit',
'Nombre del Medicamento' => 'N_medicamento',
'Tipo de Medicamento' => 'Tipo_medicamento',
'Nombre de Laboratorio' => 'Laboratorio',
'Cantidad Egresada' => 'Cantidad',
'Fecha de Vencimiento' => 'Fecha_vencimiento',
'Precio de Venta' => 'P_venta_unitario',
'Nº de Atención' => 'N_atencion');
$grid = new Aco_DataGrid;
$paginar_resultados = array( 0, 3, 3 );
$nombreGrid = "Salida";
$grid->iniciar($sql, '', $campos,$nombreGrid,$paginar_resultados);
//$grid->iniciar( $sql, '', $campos);
$grid->grid_AtributosTabla(0,'#cccccc','#CCCCCC','#c7c7c 7','center');

$contenido = "<a href='editar_medicamento.php?editar=$campoEscogido $'>Editar</a>";
$campoEscogido='ID';
$despuesDe ='Nº de Atención';
$titulo = "Modificar";
$grid->add_ColumnaDespuesDe( $contenido, $campoEscogido, $despuesDe, $titulo );

$colores = array ( '#E1E1E1', '#CCCCCC' );
$grid->grid_BgColorFC('#c7c7c7',$colores);
$grid->grid_WidthAndHeight(1024,30);
$grid->grid_PacingAndPadding(3, 3);
$grid->gridMostrar();
?>
el problema es que si le doy clik en editar no me escoje el id de esa fila. Bueno he visitado muchos foros y hablan muy poco de esto.

Estaré a la espera de su respuesta...gracias de antemano.

Nota: si tienen ejemplos se los agradeceria.
  #24 (permalink)  
Antiguo 04/11/2012, 23:32
 
Fecha de Ingreso: noviembre-2012
Mensajes: 1
Antigüedad: 12 años
Puntos: 0
Respuesta: Clase - Data Grid

Por si es de utilidad, para mremplazar el $campoEscogido solo basta con poner {} y remplazará {} con el valor del campo..

$contenido = "<a href='editar_medicamento.php?editar=$campoEscogido $'>Editar</a>";

debe ser:

$contenido = "<a href='editar_medicamento.php?editar={} $'>Editar</a>";
  #25 (permalink)  
Antiguo 12/11/2012, 20:08
Avatar de Gerardo12  
Fecha de Ingreso: octubre-2012
Ubicación: Veracruz,Veracruz
Mensajes: 12
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Clase - Data Grid

hola,

he estado utilizando el data grid, pero lo quiero utilizar con caja de texto o con selects, pero no encuentro ejemplos claros conectados a base de datos, perdonen ero soy nuevo en esto de programacion web y necesito hacer una tabla con la que pueda tener la seleccion k uno guste, es decir cada columna tiene k tener un select para k asi de acuerdo a lo seleccionado pro columna sea lo k aparesca en la tabla podrian ayudarme con eso por favor muchisimas gracias
  #26 (permalink)  
Antiguo 13/11/2012, 08:14
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años, 7 meses
Puntos: 31
Respuesta: Clase - Data Grid

Yo también hace tiempo desarrolle un datagrid, pero lo llame gridview.

Una desventaja que yo le veo a tu grilla que es muy dependiente de una consulta SQL, no seria mejor pasarle un datasource? ... así este solo se encargaría de mostrar la grilla sin importar de donde viene (mysql,oracle,mssql,xml,csv,txt,etc)

Adjunto mi grilla

Código PHP:
Ver original
  1. <?php
  2.     class GridView{
  3.         private $_ds;
  4.         private $_name;
  5.         private $_ClassName = '';
  6.        
  7.         private $_columns = array();
  8.         private $_TColumns = array();
  9.         private $_WColumns = array();
  10.        
  11.         private $_fields  = array();
  12.         private $_actions = array();
  13.         private $_idAction = '';
  14.        
  15.         private $_rows = 0;
  16.         private $_pager = 0;
  17.         private $_tPager = 0;
  18.         private $_pRequest = '';
  19.        
  20.         private $_cRow = 1;
  21.         private $_RPage;
  22.        
  23.         public function setName($name){
  24.             $this->_name = $name;
  25.         }
  26.        
  27.         public function setClassName($cn){
  28.             $this->_ClassName = $cn;
  29.         }
  30.  
  31.         public function setDataSource($ds){
  32.             $this->_ds = $ds;
  33.         }
  34.        
  35.         public function setColumns($cols){
  36.             $this->_columns = explode(',',$cols);
  37.         }
  38.        
  39.         public function setTColumns($cols){
  40.             $this->_TColumns = explode(',',$cols);
  41.         }
  42.        
  43.         public function setWColumns($cols){
  44.             $this->_WColumns = explode(',',$cols);
  45.         }
  46.        
  47.         public function setFields($fl){
  48.             $this->_fields = explode(',',$fl);
  49.         }
  50.        
  51.         public function setActions($actions){
  52.             if(count($this->_columns)>0)
  53.                 array_unshift($this->_columns, '&nbsp;');
  54.             array_unshift($this->_fields, 'x');
  55.             $this->_actions = explode(',',$actions);
  56.         }
  57.        
  58.         public function setIdAction($id){
  59.             $this->_idAction = explode(',',$id);
  60.         }
  61.        
  62.         public function setRowsAndPager($rw,$pg){
  63.             $this->_rows = $rw;
  64.             $this->_pager = $pg;
  65.             /*La cantidad de paginas que hay en total*/
  66.             $this->_tPager = (($this->_rows%$this->_pager)==0) ? (int)($this->_rows/$this->_pager) : (int)($this->_rows/$this->_pager) + 1;
  67.         }
  68.        
  69.         public function setPRequest($rq){
  70.             $this->_pRequest = $rq;
  71.         }
  72.        
  73.         public function setCRow($rw){
  74.             $this->_cRow = $rw;
  75.         }
  76.        
  77.         public function setRefreshPage($rp){
  78.             $this->_RPage = base_url('index.php/' . $rp);
  79.         }
  80.        
  81.         public function render(){
  82.             $tb  = '<table id="' . $this->_name . '" class="gridview UserGridView ' . $this->_ClassName . '">';
  83.             $tb .= '{header}{rows}{pager}';
  84.             $tb .= '</table>';
  85.            
  86.             /*Header*/
  87.             $th = ''; $t = ''; $w = 0;
  88.             foreach($this->_columns as $k => $col){
  89.                 /*Ancho de cabezera*/
  90.                 $w = ($this->_WColumns[$k]>0) ? 'style="width: ' . $this->_WColumns[$k] . 'px;" ' : '';
  91.                 /*Dejamos un espacio para la columna de acciones*/
  92.                 $th .= "<th $t $w>$col</th>";
  93.                 if($k == count($this->_columns)){
  94.                     $th .= "<tr>$th</tr>";                 
  95.                 }
  96.             }
  97.            
  98.             /*Filas*/
  99.             $td = '';
  100.            
  101.             foreach($this->_ds as $x => $r){
  102.                 $alter = ($x%2) ? 'class="alter"' : '';
  103.                 $td .= "<tr $alter>";
  104.                 foreach($this->_fields as $k => $col){
  105.                     $t = ($this->_TColumns[$k]<>'x') ? 'class="' . $this->_TColumns[$k] . '" ' : '';
  106.                     /*Ancho de cabezera*/
  107.                     $w = ($this->_WColumns[$k]>0) ? 'style="width: ' . $this->_WColumns[$k] . 'px;" ' : '';
  108.                     if($col=='x'){
  109.                         $td .= '<td ' . $w . ' class="actions">';
  110.                         foreach($this->_actions as $at){
  111.                             $ids = "";
  112.                             foreach($this->_idAction as $k => $id)
  113.                                 ($k < count($this->_idAction)-1) ? $ids .= $r->$id . '|' : $ids .= $r->$id . '';
  114.                             switch($at){
  115.                                 case 'select':
  116.                                     $td .= '<input type="image" src="' . base_url() . 'assets/css/images/_select.png" class="gv_select" value="' . $ids . '" />';
  117.                                     break;
  118.                                 case 'search':
  119.                                     $td .= '<input type="image" src="' . base_url() . 'assets/css/images/_search2.png" class="gv_search" value="' . $ids . '" />';
  120.                                     break;
  121.                                 case 'delete':
  122.                                     $td .= '<input type="image" src="' . base_url() . 'assets/css/images/_delete.png" class="gv_del" value="' . $ids . '" />';
  123.                                     break;
  124.                             }
  125.                         }
  126.                         $td .= '</td>';
  127.                     }else{
  128.                         $td .= "<td $w $t>" . $r->$col . "</td>";
  129.                     }
  130.                 }
  131.                 $td .= '</tr>';
  132.             }
  133.            
  134.             /*Pager*/
  135.             $pg = '';
  136.             if($this->_rows > 0){
  137.                 /*Paginas en total*/
  138.                 $pg .= '<tr class="pager">
  139.                     <td colspan="' . count($this->_columns) . '">';
  140.                 $pg .= img(array('src'=>'assets/css/images/_loading.gif','class'=>'loading','title'=>'Cargando sea paciente, en caso de demorar demasiado consulte con su proveedor.'));
  141.                 $pg .= '<input class="gv_pager" type="hidden" value="' . $this->_pager . '" />
  142.                         <input class="gv_tpager" type="hidden" value="' . $this->_tPager . '" />
  143.                         <input class="gv_current" type="hidden" value="' . $this->_cRow . '" />
  144.                         <input class="gv_refresh" type="hidden" value="' . $this->_RPage . '" />';
  145.                 /*Desabilitamos los botones de las paginas anteriores segun la condicion*/
  146.                 if($this->_cRow > 1){
  147.                     $pg .= '<button value="1">Inicio</button>';
  148.                     $pg .= '<button value="' . ($this->_cRow - 1) . '">&lt;</button>'; 
  149.                 }else{
  150.                     $pg .= '<button value="1" disabled="disabled">Inicio</button>';
  151.                     $pg .= '<button value="1" disabled="disabled">&lt;</button>';
  152.                 }
  153.                 $pg .= '<input class="gv_page" type="text" style="width: 25px; text-align: center;" value="' . $this->_cRow . '" />';
  154.                 if($this->_cRow < $this->_tPager){
  155.                     $pg .= '<button value="' . ($this->_cRow + 1) . '">&gt;</button>';
  156.                     $pg .= '<button value="' . $this->_tPager . '">Fin</button>';          
  157.                 }else{
  158.                     $pg .= '<button value="0" disabled="disabled">&gt;</button>';
  159.                     $pg .= '<button value="0" disabled="disabled">Fin</button>';   
  160.                 }
  161.                 $pg .=  '<span class="count">Se encontraron ' . count($this->_ds) . ' registros de ' . $this->_tPager . ' paginas en total</span>';
  162.                 $pg .= '</td>
  163.                 </tr>';
  164.             }
  165.            
  166.             $tb = str_replace('{header}',$th,$tb);
  167.             $tb = str_replace('{rows}',$td,$tb);
  168.             $tb = str_replace('{pager}',$pg,$tb);
  169.             return $tb;
  170.         }
  171.     }

Y un ejemplo de como implementarla

Código PHP:
Ver original
  1. /*gridview*/
  2.         $this->gridview->setDataSource($this->objAlmacenDLO->listarStockProductos($p,$w));
  3.         $this->gridview->setColumns('ID,Nombre,stock,Categoria,Marca,UND');
  4.         $this->gridview->setFields('idProducto,nombre,stock,categoria,marca,idUnidadMedida');
  5.         $this->gridview->setActions('select');
  6.         $this->gridview->setIdAction('idProducto');
  7.         $this->gridview->setTColumns('center,x,x,x,x,x,x,x,x,x');
  8.         $this->gridview->setWColumns('55,70,x,65,90,65,100,100,55,100');
  9.         $this->gridview->setRowsAndPager($this->objAlmacenDLO->totalStockProductos($w),15);
  10.         $this->gridview->setRefreshPage('almacen/stock');
  11.         $this->gridview->setCRow($c);

A lo mejor podríamos hacer una mejor grilla entre los GURU, y mas controles como lo haria en webforms ASP.NET jojojojo

EDIT: no usen mi codigo, me acabo de dar cuenta que el mensaje es del 2009 ... yo publique el codigo para darle una idea de como lo implemente yo, pero para que esto funcione hace falta jquery, y usar codeigniter... saludos

Última edición por HiToGoRoShi; 13/11/2012 a las 08:23
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 12:16.