Ver Mensaje Individual
  #29 (permalink)  
Antiguo 31/03/2005, 10:59
Cluster
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 23 años
Puntos: 129
sism82

Intentando probar tu propuesta me topé con algunos problemas con el siguiente método:

Código PHP:
    /** 
     * Try to load a new extension 
     * @return bool 
     * @param String $ExtensionName 
     * @param String $ExtensionDirectory 
     * @param Mixed $ExtensionConstructorArg1 
     * @param Mixed $ExtensionConstructorArg2 
     * @param Mixed $ExtensionConstructorArgN... 
     * @final 
     * @acces public 
     */ 
    
function LoadExtension($ExtensionFile,$ExtensionName$ExtensionDirectory null
    { 
        
$ExtensionName      = (string)$ExtensionName
        
$ExtensionDirectory $ExtensionDirectory === null 
                            
null 
                            
: (string)$ExtensionDirectory
        
$class_file  $ExtensionDirectory === null 
                     
$this->default_extensions_dir.$ExtensionFile 
                     
$ExtensionDirectory.$ExtensionFile
                    
        if ( 
file_exists($class_file) ) 
        { 
            include_once 
$class_file
            if ( !
class_exists($ExtensionName) ) 
            { 
                die(
"Class '{$ExtensionName}' does not exists in file '{$class_file}'!"); 
            } 
            else 
            { 
                
//getting extension constructor arguments 
                
$arguments   func_get_args(); 
                
$num_args    count($arguments); 
                
$string_args ""
                for ( 
$i 2$i $num_args$i++ ) 
                { 
                    
$string_args .= "\$arguments[$i], "
                } 
                
$string_args substr($string_args,0,strlen($string_args) - 2); 
                
$eval_code "\$this->extensions_references[\$ExtensionName] =& new \$ExtensionName($string_args);";
                eval(
$eval_code); 
                if ( !
is_subclass_of($this->extensions_references[$ExtensionName], 'FPDF') ) 
                { 
                    die(
"Class '{$ExtensionName}' is not a subclass of FPDF!"); 
                } 
                else 
                { 
                    
$this->extensions_vars[$ExtensionName] = array(); 
                    
$this->extensions_vars[$ExtensionName] = get_class_vars($ExtensionName); 
                    
$this->MergeExtensionsVars(); 
                    return 
true
                } 
            } 
        } 
        else 
        { 
            die(
"Unable to open class file '{$class_file}'!"); 
        } 
         
    } 
Si te fijas .. tuve que agregar "$ExtensionFile" .. pues se estaba usando $ExtensionName tanto como nombre del archivo ".php" como el nombre de la classe que podría contener. No sé si es que se asumia que el nombre del archivo sería=al de la classe (sin .php ni nada más) .. Pero con esa modificación por lo menos por ahí no hay problemas.

También había otros detallitos que ahí están corregidos:
$this->MergeExtensions(); en lugar de $this->MergeExtensionsVars();

Pero a partir de ahí ya me asaltaron otro tipo de errores:
Warning: array_key_exists(): The second argument should be either an array or an object in ...
En el método MergeExtensionsVars()

Estoy usando la propuesta tipo:
Código PHP:
$pdf=new FpdfExtensionsHandler();
$pdf->SetDefaultExtensionDir($_SERVER['DOCUMENT_ROOT'].'/classes/fpdf/');
$pdf->LoadExtension('cabecera_pie.php','cabecera_pie');
$pdf->SetExtension('cabecera_pie'); 
Siendo cabecera_pie (la classe):

Código PHP:
<?
class cabecera_pie extends FPDF
{

//Cabecera de página
function Header()
{
    
//Logo    
    
$this->Image('../../img/logo.jpg',115,9,83);    
    
//Salto de línea
    
$this->Ln(10);
}

//Pie de página
function Footer()
{
    
    
$this->SetY(-15);
    
//Arial italic 8
    
$this->SetFont('Arial','I',10);
    
        
//$this->Ln(5);
    
$this->MultiCell(0,4,"Pie de página",0,'C');
}
}
?>

Un saludo,

Última edición por Cluster; 31/03/2005 a las 11:03