Bases
Para las necesidades de nuestro artículo, supongamos que tenemos una página
sobre un conjunto musical. Para que el trabajo nos resulte agradable, supongamos
que es el grupo The Beatles. La parte en la que mejor se pueden aplicar
las plantillas es la discografía del conjunto. Cada disco debería tener su propia página
con el nombre del álbum, la descripción de las canciones, la fotografía de la portada
además de una breve descripción. Todos van a utilizar las plantillas preparadas por
nosotros, lo que facilita añadir rápido los siguientes discos, y al mismo tiempo, las
modificaciones posteriores de cada una de las páginas.
Para eso creamos una plantilla de ejemplo, cuyo contenido se presenta en
el Listado 1. Como se puede ver ya a primera vista, es un documento común
y corriente escrito en XHTML. Sin embargo, es fácil encontrar el lugar donde
aparecen las variables. En las plantillas de Smarty, el nombre de las variables va
precedido por el símbolo del dólar ($)
y encerrado entre claves. Además, en ellas no se tienen puntos y comas, que
son tan comunes en los scripts de PHP. El archivo de la plantilla es un archivo
de texto común, al cual le asignamos la extensión .tpl
(del inglés: template, es decir, plantilla). Por supuesto, nada nos
impide darle la extensión que queramos.
Listado 1: Contenido de la plantilla album.tpl
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-2" />
<meta name="description" content="Discografía del conjunto The Beatles" />
<title>{$albumName}</title>
</head>
<body>
<h3>{$albumName}</h3>
<table>
<tr>
<td><img src="{$albumCover}" alt="" /></td>
<td><b>Índice de canciones:</b><br />{$albumSongs}</td>
</tr>
</table>
<h4>Descripción del álbum:</h4>
<p>{$albumSynopsis}</p>
<p><a href="">Página principal</a></p>
</body>
</html>
El archivo debemos almacenarlo en el directorio /templates.
Cuando ya tengamos lista la plantilla, debemos utilizarla en nuestro script.
Para eso creamos un documento cuyo contenido lo muestra el Listado 2. Esta
vez se trata de un archivo PHP común. Donde se definen los valores concretos
de nuestras variables y la plantilla utilizada. Este archivo se coloca junto
con otros documentos web.
Listado 2: Archivo sgtpep.php, el cual va a utilizar la plantilla album.tpl
<?
require ("Smarty.class.php");
$smarty = new Smarty;
$smarty->assign("albumName", "Sgt. Pepper's lonely hearts club Band");
$smarty->assign("albumCover", "grafika/sgtpep.jpg");
$smarty->assign("albumSongs", "Sgt. Pepper's Lonely Hearts Club Band;
With A Little Help From My Friends;Lucy In The Sky Of Diamonds;
Getting Better;Fixing A Hole;She's Leaving Home;
Being For The Benefit Of Mr. Kite!;Within You, Without You;
When I'm Sixty-Four;Lovely Rita ;Good Morning, Good Morning;
Sgt. Pepper's Lonely Hearts Club Band (Reprise);A Day In The Life");
$smarty->assign("albumSynopsis", "El álbum más famoso del conjunto y uno
de los mejores álbumes en la historia de la música. Novedoso, genial -
- una verdadera obra de arte. El disco fue introducido al mercado en 1967 y se convirtió en uno
de los símbolos de esa época.");
$smarty->display("album.tpl");
?>
En este lugar debemos decir algunas palabras sobre el mecanismo de Smarty. En
la primera etapa, tiene lugar la compilación de la plantilla. Pero esto no tiene nada que
ver con la compilación conocida de tales lenguajes como, por ejemplo, Java, o la
compilación de scripts PHP a opcode. Su propósito es la conversión de la plantilla
a un documento normal de PHP. Esto significa que, por ejemplo, la notación
{$var} será cambiada a:
<?php
echo $this->_tpl_vars['var'];
?>
El documento, de esta forma, es salvado automáticamente dentro del
directorio /templates_c.
En la siguiente llamada al archivo sgtpep.php, el servidor
enviará al navegador los archivos ya convertidos, lo que permite el ahorro
de tiempo y de trabajo del parser.
El efecto del funcionamiento de todo eso se presenta en la Figura 3. Ahora,
expliquemos en detalle de qué es responsable cada método presentado en el
Listado 2.

Para empezar, tuvimos que cargar la librería y crear un nuevo objeto tipo
smarty. Luego utilizamos el método assign
para crear las variables y asignarles valores concretos. Smarty
maneja los mismos tipos de variables que PHP, así que podemos utilizar
números, cadenas, arrays, etc. Al final, hicimos uso del método display, que
carga la plantilla dada y despliega todo el documento. Desde luego, el
archivo sgtpep.php podría contener una
secuencia de funciones complicadas que permitirían la carga de datos desde
una base de datos, archivos de texto, etc. Pero supongamos que aquí ya las
conocemos y que podemos asignarlas a variables de una vez. En este
momento, debemos prestar atención a un punto importante. Todo lo que se
colocará en la plantilla entre llaves, será tratado como una posible variable
o función. Así que, si deseamos introducir una llave en el texto, debemos
utilizar {ldelim} para la llave izquierda y
{rdelim} para la llave derecha. Lo
mismo se refiere a colocar en el documento estilos o scripts, por ejemplo:
<style>
p {ldelim}color: #000000;
font-size: 12px{rdelim}
</style>
Es fácil convencerse de que este método resulta fastidioso en el caso de una gran
cantidad de llaves. Entonces, podemos
utilizar el tag {literal} disponible
en Smarty. Todo lo que se encuentra
entre {literal} y {/literal} no será
interpretado por el mecanismo Smarty.E l ejemplo anterior del código lo podemos
cambiar por:
{literal}
<style>
p {color: #000000;
font-size: 12px}
</style>
{/literal}
De paso mencionaré que Smarty tiene su propio mecanismo de comentarios,
que son eliminados durante la compilación. Los comentarios en la plantilla
se inician con {* y terminan con *}.
Volviendo a nuestra plantilla de ejemplo, vemos que se pueden mejorar en ella
muchas cosas. Comencemos con algo sencillo: añadamos algunos modificadores.