Ver Mensaje Individual
  #5 (permalink)  
Antiguo 08/09/2006, 12:23
Avatar de GatorV
GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Bueno ese fue un ejemplo que me vino a la mente, yo por decir me encontre hace poco con un problema, tengo una clase que se encarga de hacer "modulos", o sea maneja las altas, bajas, modificaciones, y busquedas de una tabla, todo por una misma clase.

Esta clase implementa muchisimas otras clases, entre ellas una que es DataTable que se encarga de hacer una tabla de datos a partir de un Query SQL, esta tabla a su vez incorpora una clase Formatter que se encarga de "dibujar" cada celda y cada header de forma dinamica, (por decir si tengo idUsuario => Clave de Usuario).

El problema era como podia yo desde mi clase heredada de mi clase modulo decirle a la clase DataTable que usara otro formateador, y mi solucion fue usar metodos estaticos, asi ya podia hablar directamente con DataTable sin tener que estar asiendo "trucos".

Te pongo parte del codigo para que veas:
Código PHP:
import"com.uscconsultores.*" );

/**
 * Class porEncuestaModule
 *
 * Esta clase se encarga de proveer los metodos de actualizacion, edicion
 * borrado, etc. de cada tabla de la base de datos.
 * 
 * @package com.uscconsultores
 * @author Christopher Valderrama <[email protected]>
 * @copyright Copyright (c) 2006
 * @version $Id$v1.0$26 Jul 2006
 * @access public
 **/
class porEncuestaModule extends GeckoModuleManager {
    private 
$encuestaID// @var int private Guarda el ID de Encuesta actual
    
private $tabla// @var string private Guarda la Tabla actual
    
private $nowFields = array(); // @var array private guarda los campos a los cuales hay que darles por defecto el valor de "hoy"
    
    /**
     * Constructor
     *
     * Crea una instancia de nuestra clase, y establece algunos parametros nescesarios
     *
     * @param string $name Nombre del modulo
     * @param array $settings Settings para el modulo
     * @param int $encuestaID ID de la encuesta actual
     * @param string $tabla Nombre de la Tabla
     * @param array $nowFields Campos en los que se llena "hoy"
     **/
    
public function __construct$name$settings$encuestaID$tabla$nowFields ) {
        
$this->encuestaID $encuestaID;
        
$this->tabla $tabla;
        
$this->nowFields $nowFields;
        
        
/**
         * Establecemos que las tablas van a usar un formateador USC
         **/
        
GeckoDataTable::setDefaultFormatter( new USCFormatter() );
        
        
parent::__construct$name$settings );
    }
    
    
/**
     * newRecord
     *
     * Este metodo es llamado una vez que se ha procesado y validado la forma Web
     * agrega el campo nescesario de idEncuesta, y agrega la fecha de hoy para los
     * campos que la requieran.
     * 
     * @param array $form_fields
     * @access protected
     * @return mixed $id El id Auto Generado en la BD (si aplica)
     * @throws Exception cuando hay un error de insercion en la BD
     **/
    
protected function newRecord$form_fields ) {
        
$form_fields['idEncuesta'] = $this->encuestaID;
        if( 
is_array$this->nowFields ) && ( count$this->nowFields ) > ) ) {
            foreach( 
$this->nowFields as $field ) {
                
$form_fields[$field] = date"Y-m-d" );
            }
        }
        
        return 
parent::newRecord$form_fields );
    }
    
    
/**
     * buildBrowse
     *
     * Este metodo construye el query para generar el Table, y obtener los
     * campos de la base de datos.
     * 
     * @access protected
     * @return string El query generado limitado a datos por encuesta
     **/
    
protected function buildBrowse() {
        
$fields $this->buildQueryFields(); // Este metodo interno, selecciona los campos definidos en el XML
        
$query "SELECT %s FROM %s WHERE `idEncuesta`='%s'";
        
        
$query sprintf$query$fields$this->tabla$this->encuestaID );
        
        return 
$query;
    }