Professional Documents
Culture Documents
Motores de plantillas
Los motores de plantilla sirven para separar la presentacin de la lgica. Es til en la creacin de aplicaciones en las cuales el diseador grfico y el programador de la aplicacin juegan roles diferentes y muchas veces no son la misma persona. Adems ayudan a hacer parte de la aplicacin ms mantenible. Son una parte importante de los administradores de contenido.
PHPlib: plantillas
La clase template permite guardar el cdigo HTML en archivos externos que estn completamente libres de cdigo PHP, pero que contienen campos de reemplazo. La clase provee funciones que pueden rellenar los campos con hileras arbitrarias. Estas hileras pueden ser muy grandes, v.b. tablas enteras.
Ejemplo de PHPlib
PHPlib incluye la clase Template. Las sustituciones se definen con {}. Pequeo ejemplo:
<?php $t = new Template; $t->set_var("a", "definida como hugo"); $t->set_var("b", "el valor de a es {a}"); print $t->subst("b") ?>
Ejemplo de PHPlib 2
Ejemplo (pagina.ihtml):
<html> <head><title>{TITULO_PAGINA}</title></head> <body bgcolor="#ffffff"> <table border=1 cellpadding=4 cellspacing=0 bgcolor="#eeeeee"> <tr> <td colspan=2><h1>{TITULO_PAGINA}</h1></td> </tr> <tr> <td>{SALIDA}</td> <td>Content<br>{VARIABLE_INDEFINIDA}</td> </tr> </table> </body> </html>
Ejemplo de PHPlib 2
Ejemplo (caja.ihtml):
<!-- start caja.ihtml --> <table border=1 bgcolor="#cccccc" cellpadding=4 cellspacing=0> <tr> <td colspan=2><b>{TITULO}</b></td> </tr> <!-- BEGIN fila --> <tr> <td>{NUM}</td> <td>{NUM_GRANDE} </tr> <!-- END fila --> </table> <!-- end caja.ihtml -->
Ejemplo de PHPlib 2
Ejemplo PHP:
<?php /* incluye la clase Template */ include("template.inc"); /* crea una clase */ $t = new Template(); /* $t->debug = 7; */ /* activa la depuracin */ /* define dos archivos */ $t->set_file(array( "pagina" => "pagina.ihtml", caja" => caja.ihtml")); /* define una variable contenida en otra */ $t->set_block(caja", fila", filas"); /* define two variables manually */ $t->set_var(array("TITULO" => Prueba", TITULO_PAGINA" => PAGINA DE PRUEBA"));
Ejemplo de PHPlib 2
Ejemplo (continuacin): for ($i=1; $i<=3; $i++) { $n = $i; $nn = $i*10; /* define valores para NUM y NUM_GRANDE */ $t->set_var(array("NUM" => $n, "NUM_GRANDE" => $nn)); /* reemplaza NUM y NUM_GRANDE en fila y * agrega el resultado a filas */ $t->parse(filas", fila", true); } /* reemplaza todas las variables en caja y pone el resultado en SALIDA * luego reemplaza todas las variables en pagina y pone el resultado en SALIDA */ $t->parse(SALIDA", array(caja", pagina")); /* imprime SALIDA */ $t->p(SALIDA"); ?> <hr> Variables indefinidas en SALIDA: <?php print @implode(", ", $t->get_undefined(SALIDA")); ?>
Ejemplo de PHPlib 3
Ejemplo ms complejo:
Libro de visitas utilizando la clase Template de PHPlib.
Ejemplo de Smarty
Ejemplo pequeo de Smarty:
index.tpl
{* Smarty *} Hola, {$name}!
index.php
<?php // lee la biblioteca Smarty require('Smarty.class.php'); $smarty = new Smarty; $smarty->template_dir = '/home/bsolano/public_html/smarty/plantillas/'; $smarty->compile_dir = '/home/bsolano/public_html/smarty/plantillas_c/'; $smarty->config_dir = '/home/bsolano/public_html/smarty/config/'; $smarty->cache_dir = '/home/bsolano/public_html/smarty/cache/'; $smarty->assign('nombre','Braulio'); $smarty->display('index.tpl'); ?>
Ejemplo de Smarty
Ejemplo con base de datos:
http://www.codeforsoup.com/edu/smarty.php
Proyectos de Plantilla
Existen muchos proyectos que tratan de realizar plantillas. Se puede encontrar una lista aqu:
A Complete List of PHP Template Engines?
Adems el foro en el enlace anterior tiene una discusin interesante sobre XSLT como motor de plantillas.
Este proyecto desarrolla una utilera de componentes para aplicaciones web. Esta utilera pretende ser un marco de patrones modulares para la creacin de aplicaciones web de alto rendimiento.