You are on page 1of 17

Separacin de la presentacin: Plantillas

CI-2413 Desarrollo de aplicaciones para Internet

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.

Motores de plantillas en PHP


Los motores de plantilla entonces logran dos objetivos:
Separar la presentacin de la lgica del negocio. Separar cdigo PHP complejo del cdigo HTML.

Sin embargo las plantillas han agregado ciertas complejidades:


Se crea una pgina de mltiples archivos. Se agrega un nivel ms de procesamiento.

Motores de plantillas en PHP


Para PHP existen muchsimos motores de plantillas diferentes, al menos sesenta, y todos difieren en filosofa y tcnica. Para algunos lo importante es separar el HTML de PHP y para otros lo importante es separar la lgica de presentacin de la lgica del negocio. Adems tambin se diferencia en cuanto a si utilizan expresiones regulares, str_replace, compilacin, parseo lxico, etc.

Motores de plantillas en PHP


Se recomienda leer el artculo:
Beyond The Template Engine

Ejemplos de motores de plantillas:


Smarty PHPlib FastTemplate Templeet

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.

Enlaces tiles de PHPlib


http://www.sanisoft.com/phplib/manual/template. php http://www.phpbuilder.com/columns/david20000 512.php3 http://www.devshed.com/Server_Side/PHP/PHP Lib/

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.

Ms all de las plantillas y la abstraccin de bases de datos


Existen proyectos como:
http://wact.sourceforge.net/

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.