Aplicación de funciones
Smarty tiene muchas funciones útiles, las cuales se pueden utilizar directamente
en la plantillas. Tienen una estructura y construcción diferente a sus
correspondientes de PHP. Primero, los nombres de las funciones son colocados
(así como las variables) entre claves. Segundo: los parámetros no se colocan
entre paréntesis, sino se escriben en forma idéntica como se hace con los atributos
en HTML – colocando el nombre y el valor después del signo de igualdad.
La función include() aplicada en PHP que en el script tomaría la forma:
include ("file.txt");
en la plantilla de Smarty se vería así:
{include file="file.txt"}
Además, ciertas funciones tienen tags de apertura y cierre, por ejemplo, {literal}
presentada anteriormente. Como ya conocemos la información básica
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 título de la canción, y el valor – el tiempo de duración (esto requiere cambios dentro
del archivo sgtpep.php) Para leer los datos de un array de este tipo, utilizaremos la
función {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 calificación 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 función y definimos
sus parámetros, diremos algo a continuación. 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 código, tiene lugar la visualización de
las variables, introduciendo simplemente sus nombres a la plantilla. Conviene
prestar atención a la primera variable – {$smarty.foreach.songs.iteration}.
Es una variable de entorno, sobre la que escribí más en la sección “Variables de
entorno”. Gracias a ella podemos obtener el número de iteración 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 duración – todo gracias
a tres líneas de código. ¿Hay todavía alguien a quien no le gusta Smarty?
Prepáraos para algo todavía mejor.
Añadamos elementos extras a nuestra página de ejemplo – calificación del
álbum. Para este propósito necesitaremos una forma para votar, además del script
correspondiente que contará los votos y almacenará los resultados. La forma
más sencilla es insertar una combo box en la página, que ocupa menos espacio que
los campos de selección. Supongamos que a cada disco le vamos a asignar el
rango de calificaciones del 1 al 6. Para generar la lista y el formulario, podríamos
escribir un script en PHP, pero ¿para qué? Smarty hará eso por nosotros.
La lista completa será creada con
la ayuda de la función llamada {html_options}. La función tiene tres parámetros
interesantes. El primero es values, al que hay que asignarle un array con valores
que serán las opciones de la lista. El segundo es el output, que también
exige un array que contenga elementos desplegados en la lista. El último atributo
es name, que define el nombre de la lista. Todo el código 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 método assign.
Variables de entorno
La variable {$smarty} es una variable reservada. Gracias a ella tenemos acceso
a mucha información sobre los temas de Smarty, por ejemplo, el nombre de la
plantilla procesada actualmente, y no sólo 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 método POST, es suficiente
escribir {$smarty.post.id}. Aplicamos este esquema de manera analóga,
si deseamos tener acceso a la información sobre el servidor (por ejemplo,
{$smarty.server.SERVER_NAME}), sesión (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.