Uso de Templates con PHP: TemplatePower

Template Power

Template Power, un motor simple, eficaz y veloz para manejar Templates en PHP

PHP se utiliza en gran parte para desarrollo web, pero se vuelve tedioso hacer y mantener sistemas web de gran tamaño. ¿Qué pasa cuando se arma toda una web en PHP mezclado con el HTML y te piden un cambio radical del diseño?

Para evitar esos quebraderos de cabeza, se crearon los Templates, el patrón MVC, SAAS/LESS, SEO y otras tecnologías.

Los templates sirven para separar el diseño/maquetado del código fuente de una web. Algunos también pueden hacer el maquetado “al vuelo”. En este artículo veremos cómo usar TemplatePower con PHP.

Escenario

Supongamos que tenemos un archivo PHP que muestra una lista de noticias y sus comentarios, obtenidos de una base de datos. El código está mezclado con el maquetado, de esta forma:

<?
// Recorrer los datos y mostrarlos secuencialmente
foreach($noticias as $item)
{
	echo "<div>";
	echo "<b>".$item["titulo"]."</b>";
	echo "<p>".$item["contenido"]."</p>";
	echo "<b>Comentarios</b><ul>";
	foreach($item["comentarios"] as $comentario)
		echo "<li>".$comentario."</li>";
	echo "</ul>";
	echo "</div>";
}
?>

Una estructura simple. Pero si los campos a mostrar son varios, hacer un cambio de maquetado puede llevar una gran pérdida de tiempo, ya que quizás con alguna modificación borremos accidentalmente algún dato a mostrar o perdamos de vista algún tratamiento a las variables como parte de la lógica del sistema. Con el siguiente código sucede algo similar:

<? foreach($noticias as $item) { ?>
	<div>
 		<b><?= $item["titulo"]; ?></b>
		<p><?= $item["contenido"]; ?></p>
		<b>Comentarios</b>
		<ul>
			<? foreach($item["comentarios"] as $comentario): ?>
				<li><?= $comentario; ?></li>
			<? endforeach; ?>
		</ul>
	</div>
<? } ?>

El código se asemeja más a la forma de trabajar con templates, pero sigue siendo código fideo: PHP mezclado con HTML.

Utilizar Templates

TemplatePower utiliza código HTML con comentarios y etiquetas como sus plantillas. Se pueden crear bloques repetitivos y etiquetas para poner una sola vez alguna variable en el maquetado. El template para el listado de noticias sería el siguiente:

<!-- START BLOCK : noticia -->
<div>
	<b>{titulo}</b>
	<p>{contenido}</p>
	<ul>
		<!-- START BLOCK : comentario -->
		<li>{comentario}</li>
		<!-- END BLOCK : comentario -->
	</ul>
</div>
<!-- END BLOCK : noticia -->

Quizás no sea el mejor ejemplo, pero en una web tipo carrito de compras puede aligerar y separar muy bien la lógica de negocios del diseño.
Los bloques son estructuras pensadas para que se pueda poner contenido en forma de lista, uno tras otro.

El código en PHP para manejar el Template es más simple todavía:

<?php
// Cargar e inciializar
require("include/class.TemplatePower.inc.php");
$tpl = new TemplatePower("index.tpl");
$tpl->prepare();
// Recorrer los datos y mostrarlos secuencialmente
foreach($noticias as $item)
{
	$tpl->newBlock("noticia");

	// Si los campos a rellenar tienen los mismos nombres que
	// los indices de las matricies
	// podemos ahorrar todas las asignaciones con esta llamada
	// $tpl->assign($item);

	// De igual manera, podemos asignar valores individualmente
 	$tpl->assign("titulo", $item["titulo"]);
	$tpl->assign("contenido", $item["contenido"]);

	foreach ($item["comentarios"] as $comentario) {
		$tpl->newBlock("comentario");
		$tpl->assign("comentario", $comentario);
	}

	// Terminamos con el bloque y volvemos a la raíz
	// viene bien cuando tenemos bloques dentro de otros
	$tpl->gotoBlock("_root");
}

$tpl->printToScreen();
?>

Separamos de manera eficaz el código PHP con todo su procesamiento de datos, y al final solo se da la salida al Template y ¡Listo!

Pagina oficial de TemplatePower

Descargar
Descargar archivos utilizados en el articulo


5 Responses

  1. Debbie dice:

    Hola que tal. Estoy ufano de haber localizado esta pagina. La encontre pot providencia pero me entusiasma de haberlo hecho.

  2. jose13000 dice:

    Muy bueno, justo estaba buscando algo similar, ahorrar mucho trabajo y facilita hacer aplicaciones que puedan personalizar segun el gusto del cliente, lo único que no entiendo mucho es la parte de las librerías o funciones, es decir, como hacerlas, ando como loco queriendo aprender a desarrollar eso :3
    Pero igual no esta de mas usar las de otros para ir aprendiendo, grcias :D

  3. zombyk dice:

    Hola que tal, mira tengo una duda, si me puedes ayudar, la idea es a ejemplo tener un tpl padre, y otros hijos (padre es igual al orden) y los hijos(header, menu, contenido) se podria hacer?

  4. Daniel dice:

    Yo tengo una duda similar a zombyK, respecto a cómo se incluye una subplantilla y asignar valores dentro de esa subplantilla. La documentación oficial no dice nada practicamente nada y no he encontrado info al respecto. Gracias

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

*

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

© VB-MUNDO – Visual Basic y mucho más
CyberChimps