You are on page 1of 16

Smarty

Introduccin

Introduccin
Gracias a las plantillas se puede crear rpidamente gran cantidad de documentos parecidos
entre s, simultneamente, separando el lado lgico (scripts, funciones y toda la
programacin) del lado visual. Una plantilla individual puede ser utilizada un nmero
interminable de veces, incluso para la construccin de la siguiente plantilla. Sin embargo,
ahorrar tiempo no lo es todo: por lo general, es sencillo manejar una plantilla y no requiere
mucha pericia de programacin.
En Internet podemos encontrar diferentes sistemas, los cuales se pueden implementar en
PHP, por ejemplo: PHPLib, TemplatePower, o el mencionado por nosotros, Smarty una
plantilla comn es, simplemente, una clase creada en PHP. Slo que puesto que las plantillas
son parecidas entre s, entonces Porqu tendramos que elegir precisamente Smarty? La
respuesta es muy sencilla: este sistema es, en definitiva, el ms rpido. Los datos que aqu
presento provienen de la pgina "benchmark of templates". Su autor decidi comparar las
plantillas ms populares por medio de dos pruebas bsicas: sustitucin de variables y uso de
bucles. Ocupmonos ms de cerca de la primera prueba y de sus resultados. El autor cre
dos documentos. Uno de ellos contena texto y 21 nombres de variables. El segundo: tena
variables con valores definidos, que deban asignarse al primer documento. La cantidad de
variables en el segundo documento era diferente, y adems, la investigacin de cada
muestra se realiz una cantidad de veces variante. Se trataba de verificar cmo se
desenvolvan las plantillas, al proporcionarles una gran cantidad de datos a la vez y cmo lo
hacan con series de datos pequeas y mltiples.

La Figura 1 contiene los resultados para los 40 valores registrados y 5 iteraciones. Como se
puede apreciar, Smarty necesit 2 ms para realizar la investigacin completa, mientras al
ms lento competidor le tom hasta 49 ms (en promedio, una iteracin se realizaba 12 veces
ms rpido). La rapidez en funcionamiento tampoco es las nica propiedad de Smarty. El
sistema posee otras opciones tiles: ocupmonos de ellas.

o
o
o
o
o
o

Las caractersticas ms importantes de Smarty


Modificadores
Funciones
Filtros
Archivos de configuracin
Plugins
Caching (uso de la cach)

Las caractersticas ms importantes de Smarty


Primero contestmonos a esta pregunta: en qu consiste el funcionamiento de las plantillas?
Contienen, en s, la estructura completa de un documento, al cual se le pasan los valores de
ciertas variables. Es comparable al impreso para la declaracin de impuestos: es uno slo
para todas las personas fsicas, pero cada uno escribe en l sus propios datos calculados.
En las plantillas de Smarty podemos crear la estructura completa de un documento HTML, y
en el lugar donde debe desplegarse el valor de la variable, insertamos el smbolo {$var}.
Alguien podra decir que esto no es una gran cosa porque se puede obtener ese mismo
resultado colocando la funcin echo dentro del documento, por ejemplo: <?echo $var;?>.
Estoy de acuerdo en esto completamente. Pero enseguida vemos que la primera inscripcin
es ms sencilla y entendible. He aqu la primera ventaja de Smarty, no la ltima y la menos
importante.

Modificadores

Los modificadores funcionan directamente sobre las variables, modificando su apariencia o


su contenido. Gracias a ellos podemos desplegar cadenas con la ayuda de letras maysculas,
sustituir en la cadena la palabra indicada por la expresin que nos interesa, o acortarla a una
longitud concreta. Por qu no utilizar funciones de PHP en esta ocasin? Utilizando Smarty,
el programador debe preocuparse nicamente por proporcionar los datos sealados por el
diseador, y ste se ocupar de su formato. De este modo, puede concentrarse
tranquilamente en la obtencin de la informacin necesaria de la base de datos, del archivo o
de alguna funcin. Al mismo tiempo, el diseador recibe mejores y significativas posibilidades
para el formato del documento, de las que le ofrece HTML. Adems de todo esto, no tendr
problemas con usar los modificadores, dado que son ms entendibles y secillos de usar, con
respecto a las funciones correspondientes de PHP.

Funciones

Smarty tambin posee un conjunto de funciones que le introducen elementos de


programacin. Gracias a ellos se puede, por ejemplo, leer el contenido de los arrays, crear un
contador que estar numerando las cabeceras consecutivas en el texto o rpidamente crear
una lista de campos opcionales en una sola lnea de cdigo (!).
Por ejemplo, escribimos:
{html_radios
name="magazine"
options=$magazines
separator="<br />"}
colocamos en la plantilla, a la cual se le transferir el array asociativo $magazines en la
forma de:
$magazines =
array ("1" => "PHP Solutions",
"2" => "Linux+");
creando en el documento una lista con la sintxis siguiente:

<input type="radio" name="magazine"


value="1" />PHP Solutions<br />
<input type="radio" name="magazine"
value="2" />Linux+<br />
De paso, conviene mencionar que todo el cdigo creado, gracias a las funciones construdas
en Smarty, se despliega en el estndar XHTML. As debera ser por lo menos. En el ejemplo
antes mencionado se puede ver que en el interior del tag <input/> se encuentra el
atributo name. Las especificaciones de XHTML indican claramente que ese atributo debera
ser sustitudo por id. Tambin es posible la creacin de instrucciones if, por ejemplo; con el
objetivo de verificar si la variable que se da a la plantilla no est vaca, esto es:
{if $name != ""}
Bienvenido!
{else}
Cmo te llamas?
{/if}
En el ejemplo citado se despliega el rtulo Bienvenido!, si la variable $name no est vaca,
o Cmo te llamas? en el caso contrario.

Filtros

Si os gusta introducir muchos comentarios en los scripts y documentos HTML, pero no


queris que alguien los lea, entonces os gustarn los filtros. Los utilizamos principalmente
para limpiar las plantillas de los elementos indicados, antes de ser generado, a partir de
ellos, cualquier otro documento. Los filtros tambin pueden agregar nuevo contenido en los
archivos generados, por ejemplo; un tipo de firma Realizado con ayuda de Smarty.

Archivos de configuracin

Los archivos de configuracin permiten definir ciertas variables globales, a las que se
acceder desde todas las plantillas. Creando una plantilla, tenemos la posibilidad de cargar
los archivos de configuracin y las variables que en ellos se encuentran, las cuales pueden
ser utilizadas y modificadas de la misma manera que una variable comn.

Plugins

Smarty es un sistema abierto, fcil de extender o modificar. Los plugins permiten crear
nuestros propios modificadores, funciones y filtros. Tambin podemos utilizar plugins
construidos y proporcionados por otros. Ya que todo est en PHP, nicamente debemos
cumplir con las especificaciones que indican los requerimientos que se refieren a la
construccin de plugins en Smarty.

Caching (uso de la cach)

Las plantillas de Smarty son inteligentes. Si una vez realizamos trabajo y abrimos un
documento concreto, ste queda almacenado y es utilizado en el futuro. Por supuesto, si la
plantilla es modificada, el sistema lo descubre por s solo y vuelve a generar el documento. El
trabajo de Smarty puede acelerarse utilizando la cach (ing. Caching). Esta operacin
consiste en almacenar el documento en formato HTML, que ser enviado durante la siguiente

llamada al navegador del cliente, sin la necesidad de procesar nuevamente los scripts, o
realizar las consultas a la base de datos, por ejemplo.

Instalacin
Para ejecutar Smarty es suficiente

descargar el archivo correspondiente y

descomprimirlo. Por si acaso, conviene asegurarse de que nuestro servidor utiliza la versin
4.0.6 de PHP u otra ms reciente.
En el mismo archivo encontraremos algunos archivos informativos adems de 3
directorios:/libs, /demo y /misc. Nos interesa principalmente el primero, ya que incluye
todo lo que vamos a necesitar para usar Smarty debemos copiarlo al servidor.
Para usar plantillas, necesitaremos ubicar el contenido de los scripts en el
archivoSmarty.class.php con ayuda de la funcin require(). Si somos administradores
del servidor que estamos utilizando, debemos encontrar el lugar donde est intalado PHP, y
en l, crear una nueva carpeta (digamos /smarty), en el cual colocaremos el contenido del
directorio /libs. Para que no sea necesario invocar al archivo Smarty.class.php,
utilizando
la
ruta
de
acceso
completa
(por
ejemplo: /usr/local/lib/php/smarty/Smarty.class.php,
la
agregamos
al
campo include_path en el archivo php.ini. En caso de que utilicemos el hosting con el
soporte de PHP, es suficiente copiar el contenido del directorio /libs (ubicado en el
directorio principal de la cuenta). Esta vez, para facilitarnos el trabajo, podemos definir una
ruta
de
acceso
en
la
variable SMARTY_DIR,
que
se
encuentra
en
el
archivo Smarty.class.php.
Cuando los archivos ya estn en su lugar, fijmonos en la estructura de directorios donde
almacenamos nuestras aplicaciones. El empleo correcto de Smarty requiere la creacin de
cuatro
carpetas.
Sus
nombres
por
defecto
son /templates, /templates_c, /configs y /cache (a los directorios les coresponden 4
variables
dentro
del
archivo Smarty.class.php: $template_dir,
$compile_dir, $config_dir y $cache_dir). Sobre la aplicacin apropiada de estas
carpetas hablaremos despus. Ahora aadamos solamente que en caso de poseer los valores
de configuracin adecuados, se recomienda ubicar estos directorios fuera de la estructura de
documentos web (podemos encontrar ms indicaciones en el segundo captulo de la
documentacin). Tambin debemos tener la posibilidad de guardar en los
directorios/templates_c y /cache a nivel de scripts.
Si ya hemos instalado Smarty, podemos empezar con la creacin de nuestras primeras
plantillas.

Bases
Para las necesidades de nuestro artculo, supongamos que tenemos una pgina 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 discografa del
conjunto. Cada disco debera tener su propia pgina con el nombre del lbum, la descripcin
de las canciones, la fotografa de la portada adems de una breve descripcin. Todos van a
utilizar las plantillas preparadas por nosotros, lo que facilita aadir rpido los siguientes
discos, y al mismo tiempo, las modificaciones posteriores de cada una de las pginas.

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 comn y corriente escrito en XHTML. Sin
embargo, es fcil encontrar el lugar donde aparecen las variables. En las plantillas de
Smarty, el nombre de las variables va precedido por el smbolo del dlar ( $) y encerrado
entre claves. Adems, 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 comn, al cual le asignamos la
extensin .tpl (del ingls: template, es decir, plantilla). Por supuesto, nada nos impide darle
la extensin 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="Discografa 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>Descripcin del lbum:</h4>
<p>{$albumSynopsis}</p>
<p><a href="">Pgina 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
comn. 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 ms famoso del conjunto y uno
de los mejores lbumes en la historia de la msica. Novedoso, genial - una verdadera obra de arte. El disco fue introducido al mercado en 1967 y
se convirti en uno
de los smbolos 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 compilacin de la plantilla. Pero esto no tiene nada que ver con la
compilacin conocida de tales lenguajes como, por ejemplo, Java, o la compilacin de scripts
PHP a opcode. Su propsito es la conversin de la plantilla a un documento normal de PHP.
Esto significa que, por ejemplo, la notacin {$var} ser cambiada a:
<?php
echo $this->_tpl_vars['var'];
?>
El
documento,
de
esta
forma,
es
salvado
automticamente
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 mtodo presentado en el Listado 2.

Para empezar, tuvimos que cargar la librera y crear un nuevo objeto tipo smarty. Luego
utilizamos el mtodo assign para crear las variables y asignarles valores concretos. Smarty

maneja los mismos tipos de variables que PHP, as que podemos utilizar nmeros, cadenas,
arrays, etc. Al final, hicimos uso del mtodo display, que carga la plantilla dada y despliega
todo el documento. Desde luego, el archivo sgtpep.php podra contener una secuencia de
funciones complicadas que permitiran 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 atencin a un punto importante.
Todo lo que se colocar en la plantilla entre llaves, ser tratado como una posible variable o
funcin. 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 fcil convencerse de que este mtodo 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 cdigo 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 compilacin. 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: aadamos algunos modificadores.

Variables modificadas
Smarty ofrece alrededor de 20 modificadores, con ayuda de los cuales podemos cambiar la
apariencia de las variables, pero no slo eso. Para aplicar un modificador en una variable
debemos utilizar el esquema
{$variable_name|modifier_name}
Algunos de los modificadores pueden tener parmetros que deben ser proporcionados al
llamarlos. Si existiera la necesidad de aadir un parmetro a un modificador, entonces
utilizaramos el siguiente esquema:
{$variable_name|modifier_name:
parameter1:parameter2}
El parmetro puede ser una cadena o un valor numrico. En el primer caso, debemos
colocarlos entre comillas. Qu modificadores seran de utilidad en nuestro ejemplo?
Notemos que no todos los fragmentos del ttulo del lbum empiezan con maysculas. Podra
ser un dato errneo en la base de datos, pero esto no nos interesa. Este valor de la variable
fue transferido a la plantilla y debemos arreglrnoslas con eso. Para eliminar este problema,
aadamos el modificadorcapitalize a la variable $albumTitle. Este har que cada
palabra en la variable dada empiece con mayscula.

Otro punto que merece la pena subrayar, es el ndice de canciones. Supuse que es
porporcionado en forma de una variable escalar, donde los ttulos son separados por punto y
coma. Desde luego, sera ms cmodo almacenarlos en un array, pero de esto nos
ocuparemos luego. Ahora intentemos formatear la lista que nos llega en esta forma. Para
empezar, nos valdremos del modificador replace, el cual busca en la variable una cadena
que nos interesa y la cambia por otra. En este caso, estamos trabajando con un modificador
que requiere dos parmetros. El primero de ellos es la cadena a buscar y el segundo la
cadena
a
introducir.
Entonces
cambiemos
los
puntos
y
comas
en
la
variable $albumSongs por tags <br/>. De este modo obtendremos una lista de canciones,
cuyos ttulos sern colocados uno debajo del otro.
El ltimo punto ser ajustar el prrafo con la descripcin del disco. Para este propsito
debemos utilizar el modificador wordwrap, el cual ajusta la cadena a un ancho determinado.
El modificador posee tres parmetros. El primero de los parmetros indica el ancho al cual el
texto se debe ajustar (por defecto son 80 caracteres), el segundo, define el smbolo que
servir para ajustar el texto (por defecto es \n), el tercer parmetro indica si el texto debe
ser ajustado al final de la palabra o si la palabra puede ser dividida en dos partes (la primera
opcin es la que est por defecto).
La plantilla con cambios se presenta en el Listado 3, y su funcionamiento se muestra en la
Figura 4.
Listado 3: Plantilla album.tpl despus de agregar los modificadores
<!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="Discografa del conjunto The Beatles" />
<title>{$albumName|capitalize}</title>
</head>
<body>
<h3>{$albumName|capitalize}</h3>
<table>
<tr>
<td style="vertical-align: top"><img src="{$albumCover}" alt="" /></td>
<td><b>ndice de canciones:</b><br />{$albumSongs|replace:";":"<br
/>"}</td>
</tr>
</table>
<h4>Descripcin del lbum:</h4>
<p>{$albumSynopsis|wordwrap:100:"<br />"}</p>
<p><a href="">Pgina principal</a></p>
</body>
</html>

Aplicacin de funciones
Smarty tiene muchas funciones tiles, las cuales se pueden utilizar directamente en la
plantillas. Tienen una estructura y construccin diferente a sus correspondientes de PHP.
Primero, los nombres de las funciones son colocados (as como las variables) entre claves.
Segundo: los parmetros no se colocan entre parntesis, sino se escriben en forma idntica
como se hace con los atributos en HTML colocando el nombre y el valor despus del signo
de igualdad.
La funcin include() aplicada en PHP que en el script tomara la forma:
include ("file.txt");
en la plantilla de Smarty se vera as:
{include file="file.txt"}
Adems,
ciertas
funciones
tienen
tags
de
apertura
y
cierre,
por
ejemplo, {literal} presentada anteriormente. Como ya conocemos la informacin bsica
sobre las funciones, podemos aplicarlas en nuestra plantilla.
Intentemos transferir la lista de canciones en forma de tabla, y no de cadena. El ndice de
canciones lo colocamos en un array asociativo, donde las claves indican el ttulo de la
cancin, y el valor el tiempo de duracin (esto requiere cambios dentro del
archivo sgtpep.php) Para leer los datos de un array de este tipo, utilizaremos la
funcin {foreach}, la cual crea un bucle, que estar regresando, consecutivamente, todos
los elementos del array.
Listado 4: Fragmento modificado de la plantila album.tpl
...
<table>
<tr>
<td style="vertical-align: top"><img src="{$albumCover}" alt="" /></td>
<td><b>ndice de canciones: </b><br />
{foreach key="songTitle" item="songTime" from=$albumSongs name="songs"}

{$smarty.foreach.songs.iteration}. {$songTitle} {$songTime}<br />


{/foreach}</td>
<td><b>Aporta la calificacin sobre el lbum:</b><br />
<form method="get" action="vote.php">
{html_options values=$points output=$points name="points"}<br />
<input type="submit" value="Vota" />
</form>
</tr>
</table>
...
Observemos dentro del Listado 4, donde se presentaron las funciones utilizadas en nuestra
plantilla. Para empezar, abrimos la funcin y definimos sus parmetros, diremos algo a
continuacin. El primero de ellos ( key) define una variable a la que asignaremos la clave del
elemento actual del array, el segundo ( item) variable a la que asignaremos el valor del
elemento. El siguiente atributo ( from) es el nombre del array sobre el que estaremos
operando. El ltimo (name) define el nombre de nuestro bucle (no es imprescindible, pero
veremos en un momento, es til). En la siguiente parte del cdigo, tiene lugar la visualizacin
de las variables, introduciendo simplemente sus nombres a la plantilla. Conviene prestar
atencin a la primera variable {$smarty.foreach.songs.iteration}. Es una variable
de entorno, sobre la que escrib ms en la seccin Variables de entorno. Gracias a ella
podemos obtener el nmero de iteracin actual. Al final se cierran las funciones. De esta
forma sencilla obtuvimos, al mismo tiempo, el ndice numerado de canciones junto con sus
tiempos de duracin todo gracias a tres lneas de cdigo. Hay todava alguien a quien no le
gusta Smarty? Prepraos para algo todava mejor.
Aadamos elementos extras a nuestra pgina de ejemplo calificacin del lbum. Para este
propsito necesitaremos una forma para votar, adems del script correspondiente que
contar los votos y almacenar los resultados. La forma ms sencilla es insertar una combo
box en la pgina, que ocupa menos espacio que los campos de seleccin. Supongamos que a
cada disco le vamos a asignar el rango de calificaciones del 1 al 6. Para generar la lista y el
formulario, podramos escribir un script en PHP, pero para qu? Smarty har eso por
nosotros.
La lista completa ser creada con la ayuda de la funcin llamada {html_options}. La
funcin tiene tres parmetros interesantes. El primero es values, al que hay que asignarle
un array con valores que sern las opciones de la lista. El segundo es el output, que
tambin exige un array que contenga elementos desplegados en la lista. El ltimo atributo
es name, que define el nombre de la lista. Todo el cdigo que crea el formulario se presenta
en el Listado 4. La combo box puede verse en la Figura 5.

Nos falta una cosa para que la combo box pueda funcionar correctamente: el array con las
calificaciones (para definir los valores y nombres de las posiciones de la lista utilizaremos los
mismos datos). Debemos definirla en el archivo sgtpep.php con la ayuda del
mtodo assign.

Variables de entorno

La variable {$smarty} es una variable reservada. Gracias a ella tenemos acceso a mucha
informacin sobre los temas de Smarty, por ejemplo, el nombre de la plantilla procesada
actualmente, y no slo eso. Con su ayuda podemos recibir diferentes variables de entorno. Si
deseamos desplegar el valor de la variable $id, que fue transferida por el navegador por
medio del mtodo POST, es suficiente escribir {$smarty.post.id}. Aplicamos este
esquema de manera analga, si deseamos tener acceso a la informacin sobre el servidor
(por
ejemplo,{$smarty.server.SERVER_NAME}),
sesin
(por
ejemplo, {$smarty.session.id}), etc.
Es interesante la variable {$smarty.now}, en la que se almacena la fecha y el tiempo
actual del sistema Unix.

Archivos de configuracin
Los archivos de configuracin son ideales para definir variables que sern usadas en varias
plantillas. Por ejemplo, supongamos que queremos que en el ttulo del navegador siempre
aparezca el texto Super pgina sobre The Beatles. Para este propsito creamos un archivo
de configuracin llamado title.conf y lo almacenamos en el directorio /configs (por
defecto, Smarty carga de ah los archivos de configuracin). Definimos una variable en l de
la siguiente manera:
pageTitle = "Super pgina sobre The Beatles"
El nombre de la variable no inicia con el signo de dlar, y al final no hay un punto y coma.
Todo debe estar escrito en una sola lnea. La forma de llamar una variable del archivo de

configuracin, dentro de una plantilla, no es muy comn. Para este propsito debemos
colocar su nombre entre el smbolo hash (#), por ejemplo
<title>{#pageTitle#}</title>
Pero antes de insertar la variable dentro de la plantilla, debemos cargar en ella el archivo de
configuracin, con la ayuda de la funcin {config_load}. La funcin tiene el atributo file,
cuyo valor es el nombre del archivo. Recordad que es suficiente dar slo su nombre, para que
Smarty lo busque automticamente dentro del directorio /configs.
Conviene mencionar que en los archivos de configuracin podemos aplicar, los comentarios
disponibles en PHP. El otro punto importante es la forma de almacenar las variables, las que
sobrepasen la longitud de una lnea. En este caso, debemos encerrarlas entre un triplete de
comillas, por ejemplo:
foo = """Ejemplo de una variable larga"""

Uso de filtros
En Smarty, los filtros quedaron divididos en 3 grupos: Prefilters (cambian el contenido de la
plantilla antes de que haya sido compilada), Postfilters (modifican la plantilla despus de la
compilacin) y Output Filters (son ejecutados en el momento de la invocacin de la llamada
de la plantilla existente, con la ayuda del metodo display). Los filtros se pueden colocar
dentro de las plantillas de dos formas: cargar un filtro ya creado o registrar uno nuevo en un
archivo PHP. Primero describiremos este segundo mtodo.
Un filtro no es otra cosa que una funcin creada por nosotros. Debe tener dos parmetros:
$tpl_source (en el caso de los filtros del tercer grupo es $tpl_output) y &$smarty.
Como se pueden imaginar fcilmente, el primero de ellos es el contenido de la plantilla, y el
segundo nuestro objeto smarty. Exploremos el caso de postfilters, el cual qued
presentado en el Listado 5.
Listado 5: Archivo sgtpep.php despus de la modificaciones
<?
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",array(
"Sgt. Pepper's Lonely Hearts Club Band" => "(2:02)",
"With A Little Help From My Friends" => "(2:44)",
"Lucy In The Sky Of Diamonds" => "(3:28)", "Getting Better" => "(2:47)",
"Fixing A Hole" => "(2:36)", "She's Leaving Home" => "(3:35)",
"Being For The Benefit Of Mr. Kite!" => "(2:37)",
"Within You, Without You" => "(5:05)", "When I'm Sixty-Four" => "(2:37)",
"Lovely Rita" => "(2:42)", "Good Morning, Good Morning" => "(2:41)",
"Sgt. Pepper's Lonely Hearts Club Band (Reprise)" => "(1:18)",
"A Day In The Life" => "(5:33)"));
$smarty->assign("albumSynopsis", "El lbum ms famoso del conjunto y uno
de los mejores en la historia de la msica. Novedoso, genial una verdadera
obra de arte. El disco fue introducido al mercado en 1967 y se convirti
en
uno de los smbolos de esa poca.");
$smarty->assign("points", array("1", "2", "3", "4", "5", "6"));
function footer($tpl_source, &$smarty) {
return $tpl_source."\n\n<p><a href=\"\">Pgina principal</a></p>
\n\n</body>\n</html>";

}
$smarty->register_postfilter("footer");
$smarty->display("album.tpl");
?>
Al inicio definimos la funcin footer(), la cual responde de colocar el pie de pgina. En
nuestro caso es solamente un enlace a la pgina principal y los tags de
cierre </body> y </html>. Desde luego, el pie de pgina es colocado despus del contenido
de la plantilla. Luego de definir la funcin, debemos registrarla como filtro. Lo lo hacemos con
la ayuda del mtodoregister_postfilter.
Por supuesto, sera ms efectivo almacenar el filtro en un archivo separado, y despus,
cargarlo directamente en la plantilla. Mostremos pues cmo realizarlo.

Creacin de nuestros propios plugins


Smarty posibilita la creacin de nuestros propios plugins, que podrn ser modificadores,
funciones o filtros. La creacin de mdulos, que luego sern cargados en las plantillas,
requiere del cumplimiento de las reglas indicadas en la documentacin. Cada plugin lo
almacenamos dentro del directorio /plugins. El nombre de los archivos deben tener la
siguiente formatipo_del_plugin.nombre.php. Para el filtro que creamos antes, debera
serpostfilter.footer.php. En cada archivo insertamos informacin del tipo del plugin y
su funcionamiento. La misma funcin debe tener un nombre adecuado, cuyo esquema
essmarty_tipo_nombre().
Tambin
debemos
recordar
sobre
los
parmetros
indispensables. Veamos el Listado 6, donde encontraremos el ejemplo de un plugin listo.
Listado 6: Ejemplo del plugin
<?
/*
* Smarty plugin
* ----------------------------------------* File: postfilter.footer.php
* Type: postfilter
* Name: footer
* Purpose: Adding a footer at the bottom of the document
* ----------------------------------------*/
function smarty_postfilter_footer($source, &$smarty) {
return $source."\n\n<p><a href=\"\">Pgina principal</a></p>
\n\n</body>\n</html>";
}
?>
Ahora, slo nos falta eliminar la definicin de la funcin footer() del archivo sgtpep.php y
cambiar el mtodo register_postfilter por el load_filter. Observemos la Figura 6,
donde se presenta la pgina con la descripcin del siguiente lbum The Beatles Revolver
que tambin utiliza la plantilla album.tpl.

Opciones avanzadas de Smarty


Smarty tambin ofrece algunas opciones avanzadas, que pueden resultar interesantes
durante la creacin de plantillas. Cada una est desactivada por defecto y se activa
estableciendo
el
valor
en
la
variable
adecuada
del
archivo Smarty.class.php a true (verdadero) 1. Tambin pueden ser definidas, una sola
vez, dentro del documento con la ayuda del esquema $smarty->variable=value,
donde variable es el nombre de la variable, y value es su valor.

Debugging Console (consola de depuracin)

Es una consola, que tiene como fin ayudarnos eliminar errores los que podramos encontrar
en el momento de la creacin de plantillas con ayuda de Smarty. Despus de su ejecucin,
durante la visualizacin del documento que utiliza Smarty, debe abrirse una nueva ventana
del explorador, en la que sern enumeradas todas la plantillas, adems de las variables que
se hayan utilizado en el documento junto con sus valores. Veamos la Figura 7, donde se
presenta el contenido de la consola para el archivo sgtpep.php.

La forma ms sencilla de ejecutar la consola es establecer el valor adecuado en la


variable$debugging entonces sta ser desplegada siempre al abrir el documento. Por
motivos obvios, es una buena solucin slo durante la etapa de creacin de la pgina. Si
deseamos tener la posibilidad de decidir si queremos utilizar dicha consola siempre, es
suficiente establecer el valor de la variable $debugging_ctrl en el valor URL. En tal caso,
la ventana de la consola se abrir si aadimos la variable SMARTY_DEBUG en la
direccin URL de la pgina a abrir, por ejemplo:http://localhost/sgtpep.php?
SMARTY_DEBUG.
Para terminar, recordemos todava una cosa: la consola se basa en la
plantilla debug.tpl que se encuentra en la librera de archivos Smarty. Podemos modificarla
para que el aspecto de la consola concuerde con nuestras necesidades. Por otro lado, si
quisieramos pasar la plantilla de la consola a otro lugar, se debera cambiar el valor de la
variable $debug_tpl.

Modo seguro

Se puede ejecutar Smarty de modo seguro o, como lo define la documentacin, con la


variable$security activada. Si cambiamos su valor a true (verdadero), entonces Smarty
nos pone algunas limitaciones relacionadas con su funcionamiento. No podremos utilizar el
cdigo PHP directamente en las plantillas, los archivos externos podrn ser cargados
solamente desde ciertas localizaciones, adems, en modificadores e instrucciones if podrn
ser usarse las funciones de PHP, nicamente si han sido definidas con anterioridad. Al modo
seguro se ligan dos variables ms: la primera de ellas es $secure_dir, que representa el
array que define el conjunto de directorios seguros; la segunda es $security_settings,
que define el conjunto de funciones seguras de PHP.

Cache

Como mencionamos al principio del artculo, Smarty compila las plantillas y las almacena en
directorios separados con el fin de mejorar su funcionamiento. La segunda cosa que acelera
el despliegue de las plantillas es el uso de la cach. Abramos el archivo sgtpep.php y
aadamos en l la siguiente lnea
$smarty->caching=true;

y luego refresquemos la pgina en el navegador. Smarty almacenar el contenido del


documento completo dentro del directorio /cache. En la siguiente llamada, ste no ser
creado dinmicamente, sino que de manera automtica utilizar el resultado preparado
dentro del directorio /cache. Durante cunto tiempo? Una hora, ese es el lapso de tiempo,
definido en la variable $cache_lifetime; dicho archivo debe ser almacenado en la cach.
Desde
luego,
podemos
cambiar
su
valor
globalmente
dentro
del
archivo Smarty.class.php o en nuestro documento por medio de la declaracin $smarty>cache_lifetime=seconds, donde secondses el perodo en segundos, durante el cual el
archivo debe mantenerse almacenado.
Qu sucede en caso de que durante el lapso de tiempo definido por la variable, se realice un
cambio en la plantilla o en cualquier otro archivo que sea utilizado por el documento?
Entonces en el explorador todava aparecer el contenido del archivo almacenado en la
cach. Para que los cambios se reflejen enseguida se puede establecer el valor true a la
variable $compile_check. En ese caso, si Smarty descubre que la plantilla o cualquier otro
archivo ha sido modificado, el contenido de la memoria cach se crea de nuevo.
No es la solucin ideal y por eso Smarty tambin ofrece la posibilidad de almacenar slo una
parte de la pgina.

Eplogo
Y as hemos llegado al final del artculo. En l present un aspecto y mtodos bsicos para
utilizar Smarty. Tengo la esperanza de que lo utilizaris en el trabajo y que mi artculo les
haya ayudado a conocerlo mejor.
Smarty tiene varios modificadores, funciones y mtodos, que no han sido mencionados por
mi, y los cuales pueden resultar tiles en la construccin de plantillas complicadas.
Agradezco a todos la atencin. A los Beatles les agradezco su msica y hasta la prxima!

You might also like