[PHP] - Leer las {} de html, creacion de Templates tipo phpbb

Iniciado por Overlord, 24 Septiembre 2006, 20:33 PM

0 Miembros y 1 Visitante están viendo este tema.

Overlord

Amigos:

Estoy tratando de hacer un sistema de plantillas para mi web baso en el codigo de phpbb, pero tengo problemas, aqui les pongo el codigo:

clases.php

<?
class plantilla{
var $_tpldata = array();

/* Pasamos el nombre de la variables sin su extención */
        function plantilla($template_file){
                $this->jnt_file = 'themes/yellow/' . $template_file . '.jnt';
        }
       
/* Resibe la variable */
        function asigna_variables($vars){
                $this->vars= (empty($this->vars)) ? $_vars : $this->vars . $vars;
echo  $vars[2];
        }
       
/*extraido de phpbb2, funcion para una consulta SQL */
function assign_block_vars($vararray)
{
$blockname = $this->jnt_file;
reset($this);
if (strstr($blockname, '.'))
{
// Nested block.

$blocks = explode('.', $blockname);
$blockcount = sizeof($blocks) - 1;
$str = '$this->_tpldata';
for ($i = 0; $i < $blockcount; $i++)
{
$str .= '[\'' . $blocks[$i] . '.\']';
eval('$lastiteration = sizeof(' . $str . ') - 1;');
$str .= '[' . $lastiteration . ']';

}
// Now we add the block that we're actually assigning to.
// We're adding a new iteration to this block with the given
// variable assignments.
$str .= '[\'' . $blocks[$blockcount] . '.\'][] = $vararray;';

// Now we evaluate this assignment we've built up.
eval($str);
}
else
{
// Top-level block.
// Add a new iteration to this block with the variable assignments
// we were given.
$this->_tpldata[$blockname . '.'][] = $vararray;
}

return true;
}


/* Funcion encargada de cargar el archivo para ser mostrado */
function loadfile($handle)
{
$handle = "body.jnt";
// If the file for this handle is already loaded and compiled, do nothing.
if (isset($this->uncompiled_code[$handle]) && !empty($this->uncompiled_code[$handle]))
{
return true;

}

// Si el archivo no existe.
//echo "<b>$this->files[$handle]</b><br>";
if (!isset($this->files['themes/yellow/body.jnt']))
{
die("Template->loadfile(): No file specified for handle $handle");
}

$filename = $this->files[$handle];

$str = implode("", @file($filename));
if (empty($str))
{
die("Template->loadfile(): File $filename for handle $handle is empty");
}

$this->uncompiled_code[$handle] = $str;

return true;
}

function pparse()
{
$handle=$this->jnt_file;
//echo $handle;
if (!$this->loadfile($handle))
{
die("Template->pparse(): Couldn't load template file for handle $handle");
}

// actually compile the template now.
if (!isset($this->compiled_code[$handle]) || empty($this->compiled_code[$handle]))
{
// Actually compile the code now.
$this->compiled_code[$handle] = $this->compile($this->uncompiled_code[$handle]);
}

// Run the compiled code.
eval($this->compiled_code[$handle]);
return true;
}

}
?>


categorias.php

<?
$jnt_template=new plantilla("body");

//assign_block_vars
$resp = mysql_query("select * FROM categorias ORDER BY c_id") ;
while($datos = mysql_fetch_array($resp))
{
//$jnt_template->assign_block_vars('body',array
$jnt_template->assign_block_vars(array
(
'SECCION_N' => $datos['nombre'],
'DESCRIPCION' => $datos['descripcion']
));

};
//$ContenidoString = $jnt_template->muestra();
//echo $ContenidoString;
$jnt_template->pparse();
mysql_free_result($resp) ;
mysql_close($conectar) ;

?>


El problema es el siguiente:
Tengo el archivo de plantila en themes/yellow/body.xxx, entonces php me arroja el siguiente error:

Template->loadfile(): No file specified for handle body.jnt

En resumen lo que quiero es hacer una paginas con plantillas y que php me lea las {varibles} en un archivo html.

PD: Tiene que ser usando un bucle para las consultas

¿Alguien me puede ayudar?

Gracias.

Athagan

No se si te servirá, pero te dejo un tutorial de PHP donde se incluye como hacer webs con "plantillas" -> http://www.luminous.com.ar/wiki/index.php/Reemplazo_de_tags_del_template .
Saludos.

Overlord