Hola!
Tengo una pequeña clase php que me permite usar plantillas de forma bastante facil, es esta.
Código PHP:
class TemplateClass{
private $_dir = 'template/';
private $_file_ext = '.tpl';
private $_vars = array();
private $_delimiters = array('{', '}');
public function Assign($name, $value){
if(!array_key_exists($name, $this->_vars))
$this->_vars[$name] = $value;
}
public function GetAssign($name){
return $this->_vars{$name};
}
public function Template($file){
if( $output = @file_get_contents($this->_dir.$file.$this->_file_ext)){
foreach($this->_vars as $name => $value){
$output = str_replace($this->_delimiters[0].$name.$this->_delimiters[1], $value, $output); //recorremos todo el archivo para cambiar las palabras con los delimitadores a su respectiva traduccion
}
return $output;
}
else
die("La plantilla no existe.");
}
}
La forma de uso es bastante simple:
Creo un objeto
$plantilla = new TemplateClass();
Asigno las variables
$plantilla->Asign("variable","valor a cambiar")
Y muestro
$plantilla->Template->("plantilla.tlp");
Todo esto me funciona perfectamente, el problema es cuando por ejemplo, tengo una plantilla para mostrar resultados de la bd y quiero que esta se repita tantas veces como resultados tenga.
Lo estoy haciendo de esta manera:
Código PHP:
$tlpHeader = new TemplateClass();
$tlpFooter = new TemplateClass();
$tlpCont = new TemplateClass();
$tlpPreg = new TemplateClass();
foreach ($preDAO->getListaPregunta() as $preg){
// Esta es la plantilla donde le doy forma a los resultados
$tlpPreg->Assign("PREGUNTA", $preg->getPregunta());
// Y aqui, le pasto la plantilla con la forma de los resultados y lo muestro en la pagina
$tlpCont->Assign("PREGUNTAS", $tlpPreg->Template("pregunta"));
}
$tlpContenido = new TemplateClass();
$tlpContenido->Assign("HEADER", $tlpHeader->Template("header"));
$tlpContenido->Assign("CONTENIDO", $tlpCont->Template("content"));
$tlpContenido->Assign("FOOTER", $tlpFooter->Template("footer"));
echo $tlpContenido->Template("lista_preguntas");
?>
Funciona en cierta medida... solo me muestra un resultado ¿Que debo hacer?.