PHP: loadTemplate()

12.mar 2008 Envía un trackback

Sin apenas tiempo a postear me gustaría reflejar una fase de cambios y adaptaciones importantes en mi carrera profesional.

Nada mejor que hacerlo adentrándonos en el sinuoso mundo de la programación -MySQL+PHP- para sitios con gran volumen de visitas con una simple función:


function loadTemplate($tpl, $vars=null)
{
        $tpl = implode("", file($tpl));
        ob_start();
        if(!empty($vars)) extract($vars);
        eval("?>".$tpl."<?");
        $eval_buffer = ob_get_contents();
        ob_end_clean();
        return $eval_buffer;
}
 
Se trata de parsear un archivo de templates con las variables pasadas como argumento ($vars). Una forma simple de separar la vista del controlador sin tener que cargar tu aplicación con un pesado framework.
// Llamando a la función
$datos['ganador'] = 'Rodolfo Chikilicuatre';
$datos['concurso'] = 'Eurovisión';
echo $loadTemplate('saluda.tpl', $datos);

// saluda.tpl
<html><body>
<center>Premonición: El ganador de <?=$concurso;?>
será... <?=$ganador;?></center>
</body></html>
 
Como siempre, gracias a MarcosBL por sus sabios consejos en la materia.
programacion

Comentarios
Gravatar akae@12.03.2008, 'Re: PHP: loadTemplate()'

será... <?=$nombre;?></center>
$nombre ? $ganador, no? o me pierdo demasiado...

Gravatar reidrac@12.03.2008, 'Re: PHP: loadTemplate()'

Estoy con akae (para que veas que leemos lo que escribes :D).

Ahora... lo que molaría es que nos implementaras un pequeño caché, ¿no? :D

Podrías calcular una huella para $datos y asociarla a una copia en disco de saludo.tpl con los cambios hechos... y mientras no cambie la huella, devuelves la plantilla procesada desde disco.

¿Lo ves viable?

Gravatar MarcosBL@12.03.2008, 'Re: PHP: loadTemplate()'

Corregtisimo, reidrac, creo que justo esa es la idea del ob_start() y el return en vez de un simple echo, poder guardar el resultado parseado en un .html estático, en una bd, usarlo como caché, etc.. :D

Gravatar r0sk@12.03.2008, 'Re: PHP: loadTemplate()'

@akae: Correcto, ya lo he corregido. Esto pasa cuando tienes dos ejemplos en la cabeza, cambias al vuelo y son casi las 2:00 am. Sorry por el fallo.

@reidrac: Seguro es viable, incluso hasta puedes guardar el código que devuelve loadTemplate() en disco (o base de datos...) y mirar la frecuencia con la que cambia. Voy a estudiarlo ;).

Gravatar r0sk@12.03.2008, 'Re: PHP: loadTemplate()'

Vaya @MarcosBL, comentamos casi lo mismo a la vez... :P


Escribe tu comentario
 
 
Guardar datos
Escribe tu comentario:
captcha


Intenta que tu comentario sea interesante y con información relevante al tema de la entrada. BBCodes disponibles: [url=http://direccion]texto[/url], negrita: [b]texto[/b], itálica: [i]texto[/i], subrayada: [u]texto[/u]. Para mencionar o citar a alguien (quote): [cita]texto[/cita]