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,