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 después de la compilación) y Output Filters (son ejecutados en el
momento de la invocación 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 método.
Un filtro no es otra cosa que una función creada por nosotros. Debe tener
dos parámetros: $tpl_source (en el caso de los filtros del tercer grupo es
$tpl_output) y &$smarty. Como se pueden imaginar fácilmente, 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 después 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 más famoso del conjunto y uno
de los mejores 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->assign("points", array("1", "2", "3", "4", "5", "6"));
function footer($tpl_source, &$smarty) {
return $tpl_source."\n\n<p><a href=\"\">Página principal</a></p>
\n\n</body>\n</html>";
}
$smarty->register_postfilter("footer");
$smarty->display("album.tpl");
?>
Al inicio definimos la función footer(), la cual responde de colocar
el pie de página. En nuestro caso es solamente un enlace a la página
principal y los tags de cierre </body> y </html>. Desde luego, el pie de página
es colocado después del contenido de la plantilla. Luego de definir la función,
debemos registrarla como filtro. Lo lo hacemos con la ayuda del método
register_postfilter.
Por supuesto, sería más efectivo almacenar el filtro en un archivo separado,
y después, cargarlo directamente en la plantilla. Mostremos pues cómo
realizarlo.