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

Confusion sobre responsabilidad de un objeto : Exportar a Excel un grid

Estas en el tema de Confusion sobre responsabilidad de un objeto : Exportar a Excel un grid en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Saludos ! Estoy un poco confundido, mas que ayuda les pido su consejo y su opinion, construi una clase llamada DataTable que se encarga de ...
  #1 (permalink)  
Antiguo 10/07/2007, 09:20
Avatar de chechelopez  
Fecha de Ingreso: mayo-2007
Mensajes: 18
Antigüedad: 17 años
Puntos: 0
Confusion sobre responsabilidad de un objeto : Exportar a Excel un grid


Saludos !

Estoy un poco confundido, mas que ayuda les pido su consejo y su opinion, construi una clase llamada DataTable que se encarga de hacer una tabla dinamica en HTML (con un metodo que se llama toHtmlString() ) y existe dentro de esta clase un metodo llamado toExcel() que lo que hace es poner headers de excel y llamar al metodo toHtmlString() para la construccion de la tabla.

Herede de ella e hice una clase que se llama AjaxDataTable, en el cual se construye un grid basado en la libreria extjs y aqui es donde entra la confusion...

El grid que se construye con la clase AjaxDataTable quiero que tenga una opcion de exportar los datos a excel con la funcion de la clase base toExcel(), el problema esque todo el grid que se muestra en pantalla(no como en aplicaciones desktop que puedes llamar un metodo desde un evento y cosas por el estilo) evidentemente es codigo javascript, html y tengo que llamar a otro script que reciba por sesion el objeto y mande a llamar el metodo toExcel(), (esa fue la opcion que se me ocurrio).

como ustedes podran ver... aqui se rompe la responsabilidad que cada objeto debe tener y se mezcla por ejemplo teniendo que dejar un script que tenga lo siguiente ...


Código PHP:
if ($_GET['action'] == "exportarExcel") {
    
$myGrid $_SESSION['myGrid'];
    
$myGrid->toExcel();


y en el metodo donde se construye el grid en la parte del menu tengo que poner algo como lo siguiente (que es el que atrapa el click del grid en javascript):


Código PHP:
                $menu .= "function actual(item, e) {";
        
$menu .= " var pagina = 'vista.module.php?action=exportarExcel';";
        
$menu .= "    document.location.href=pagina;";
        
$menu .= "}"

Como ustedes podran notar.. $menu .= " var pagina = 'vista.module.php?action=exportarExcel';"; . aqui forzosamente tengo que dejar esta linea casada con la locacion del script y me parece poco util casar este detalle a la clase...

la pregunta del millon y Ustedes Como lo resolverian ??


Gracias
ATTE
Sergio Lopez
  #2 (permalink)  
Antiguo 10/07/2007, 09:25
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Confusion sobre responsabilidad de un objeto : Exportar a Excel un grid

Sencillo, puedes usar esto:
Código PHP:
$place $_SERVER['PHP_SELF'];
$menu .= "function actual(item, e) {";
        
$menu .= " var pagina = '$place?action=exportarExcel';";
        
$menu .= "    document.location.href=pagina;";
        
$menu .= "}"
Asi apuntas a tu script actual.

Saludos.
  #3 (permalink)  
Antiguo 10/07/2007, 09:37
Avatar de chechelopez  
Fecha de Ingreso: mayo-2007
Mensajes: 18
Antigüedad: 17 años
Puntos: 0
De acuerdo Re: Confusion sobre responsabilidad de un objeto : Exportar a Excel un grid

perfecto, no se me habia ocurrido de esa manera , pero un detalle.. tengo mi archivo AjaxDataTable.class.php (clase hija) y mi archivo DataTable.class.php(clase base), el metodo toExcel se encuentra en la clase base, el punto es que seria para mi mas adecuado que se manejara el GET en el archivo DataTable.class.php, bueno... tengo la locacion del DataTable.class.php al momento de hacer un require_once ('DataTable.class.php') ya que extiendo de ella.

Pero no tengo la locacion del script, esto se que se puede hacer remplazando a lo que regrese PHP_SELF la parte de AjaxDataTable.class.php por DataTable.class.php, de hecho esa seria la solucion al menos que visualizo, pero... ya como pregunta adicional conocen alguna otra forma de obtener la direccion url donde se encuentra la clase base ?

Gracias por tu ayuda
Saludos !!
ATTE
Sergio Lopez
  #4 (permalink)  
Antiguo 10/07/2007, 09:58
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Confusion sobre responsabilidad de un objeto : Exportar a Excel un grid

PHP_SELF siempre apunta al script sobre el cual se esta interactuando, es por eso que es mas recomendable, asi te quitas un problema y le das la caracteristica inclusive de que tu script tenga que estar en la carpeta www de tu host, ya que apunta al archivo de implementacion.

Para obtener la direccion de cualquier archivo usa la constante __FILE__ ojo esto solo te da la direccion desde el filesystem del host, no del URL que entra el cliente.

Saludos.
  #5 (permalink)  
Antiguo 10/07/2007, 10:09
Avatar de chechelopez  
Fecha de Ingreso: mayo-2007
Mensajes: 18
Antigüedad: 17 años
Puntos: 0
De acuerdo Re: Confusion sobre responsabilidad de un objeto : Exportar a Excel un grid


Cierto !, ademas de todo ello es un problema ya que originalmente el objeto que voy a serializar o pasar por sesion es precisamente un objeto AjaxDataTable y al momento de deserializarlo forzosamente tiene que estar la clase AjaxDataTable, si no se pierden sus metodos.... y si intentaba ponerlo en la clase base iba a necesitar la clase hija generando una confusion.... ademas que el boton de exportar a excel se genera en la clase hija... y es responsabilidad de la clase hija saber que hacer con ese boton...por ello la solucion fue en la clase hija AjaxDataTable poner lo siguiente :

Código PHP:
        $place $_SERVER['PHP_SELF'];
        
session_start();
        
$_SESSION['AjaxDataTable'] = $this;
        
$menu .= "function actual(item, e) {";
        
$menu .= " var pagina = '$place?action=exportarExcel';";
        
$menu .= "    document.location.href=pagina;";
        
$menu .= "}"
y despues de la declaracion de la clase AjaxDataTable dentro del mismo archivo se trato de la siguiente manera.

Código PHP:
if (isset ($_GET['action'])) {
    switch (
$_GET['action']) {
        case 
"exportarExcel" :
            
session_start();
            
$myGrid $_SESSION['AjaxDataTable'];
            
$myGrid->toExcel();
            break;
    }

Con lo cual se soluciona el problema posteado originalmente, donde dependia de otro archivo.

Gracias por tu ayuda

ATTE
Sergio Lopez
http://arquitectoweb.blogspot.com
  #6 (permalink)  
Antiguo 10/07/2007, 10:28
Avatar de chechelopez  
Fecha de Ingreso: mayo-2007
Mensajes: 18
Antigüedad: 17 años
Puntos: 0
Re: Confusion sobre responsabilidad de un objeto : Exportar a Excel un grid

Changos !
Pense que habia funcionado solo fallo un pequenio detalle

vi el codigo fuente que genero..

Código HTML:
var pagina = '/ctraweb/demo/vista.module.php?action=exportarExcel'
(funciona porque ahi tengo tambien el codigo que atrapa el GET y el SESSION de la vista)

y es la ruta del script de donde llamo la clase... como correctamente lo mencionaste...

lo que tendria que suceder es que tuviera esta ruta...
Código HTML:
var pagina = '/ctraweb/lib/DataTable/AjaxDataTable.class.php?action=exportarExcel'
ahorita busco una solucion... que por lo pronto no se me ocurre mas que incluir una constante de configuracion donde tuviera el url del script.. lo cual no me parece tan adecuado

Slds
ATTE
Sergio Lopez
http://arquitectoweb.blogspot.com

  #7 (permalink)  
Antiguo 10/07/2007, 10:33
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Confusion sobre responsabilidad de un objeto : Exportar a Excel un grid

Nunca vas a tener esa ruta, a menos que lo llames desde esa clase, como te explique, la variable PHP_SELF apunta al URL actual desde donde el cliente acceso a su pagina, o sea siempre te va a apuntar al archivo de implementacion y nunca al archivo donde esta declarada la clase (son en el caso que se llamara desde esa clase pero se romperia que la clase fuera independiente).

Saludos.
  #8 (permalink)  
Antiguo 10/07/2007, 10:50
Avatar de chechelopez  
Fecha de Ingreso: mayo-2007
Mensajes: 18
Antigüedad: 17 años
Puntos: 0
Información Re: Confusion sobre responsabilidad de un objeto : Exportar a Excel un grid

Correcto ni modo .. bueno la solucion unicamente cambio en lo siguiente :

Código PHP:
$place DATATABLE_URL 'AjaxDataTable.class.php'
Donde DATATABLE_URL es una constante que defini en mi framework...

Gracias de nuevo
Saludos
ATTE
Sergio Lopez
http://arquitectoweb.blogspot.com
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 15:08.