Smarty

Smarty
Información sobre la plantilla
Smarty.PNG
DesarrolladorMonte Ohrt, Messju Mohr http://www.smarty.net
Última versión estable3.0.7
GéneroMotor de plantillas
Sistemas Operativos compatiblesMultiplataforma
IdiomaMultilingüe
LicenciaLicencia Pública General Reducida de GNU

Smarty es un motor de plantillas para PHP, facilitando la separación de la capa de presentación (HTML/CSS) de la lógica de la aplicación (PHP), uno de los objetivos fundamentales del patrón MVC.

Smarty es...

Smarty es un motor de plantillas y funciona como la capa vista de un modelo MVC. Smarty se puede complementar con los frameworks disponibles para PHP. No garantiza un buen diseño gráfico ni de aplicación, o una adecuada separación de la presentación.

En los procesos de desarrollo donde el rol de diseñador y programador no está cubierto por la misma persona, se hace muy complejo para el primero entender el código HTML relativo al diseño cuando este se encuentra ligado y determinado por el código PHP que se encarga de la lógica de la aplicación. Es aquí donde Smarty juega su papel, ya que al usarlo el diseñador trabaja simplemente con un código HTML y algunas etiquetas que representan el contenido.

Smarty no es...

  • Un framework
  • Un MVC
  • Una alternativa a Zend, Code Igniter, o CakePHP

Filosofía

El diseño de Smarty está dirigido por estos objetivos:

  • Limpia separación entre la presentación y lógica de la aplicación.
  • Complementar PHP, no reemplazarlo.
  • Rápido desarrollo e implantación por parte de desarrolladores y diseñadores.
  • Rápido y sencillo de mantener.
  • Sintaxis fácil de entender y sin conocimientos de PHP.
  • Libre, código abierto

Ejemplo

En el archivo index.php

require_once("smarty/Smarty.class.php");
 
// Instanciar la clase de Smarty
$smarty = new Smarty();
 
// Configurar Smarty
$smarty->template_dir = "./templates/";
$smarty->compile_dir = "./templates_c/";
$smarty->config_dir = "./configs/";
$smarty->cache_dir = "./cache/";
 
// Establecer variables que se usarán en la plantilla
$smarty->assign("nombre", "José Manuel Pardo Pérez");
$smarty->assign("Dirección", "C/ Alpes, 992");
 
// Mostrar la plantilla
$smarty->display("index.tpl");

En el archivo index.tpl

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
 <html lang="es">
   <head>
     <title>Información del Usuario</title>
   </head>
   <body>
     <p>Información del Usuario:</p>
     <p>
       Nombre: {$nombre}<br />
       Dirección: {$direccion}
     </p>
   </body>
 </html>

Salida HTML generada

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
 <html lang="es">
   <head>
     <title>Información del Usuario</title>
   </head>
   <body>
     <p>Información del Usuario:</p>
     <p>
       Nombre: José Manuel Pardo Pérez<br />
       Dirección: C/ Alpes, 992
     </p>
   </body>
 </html>

Explicación

En la sección PHP se 'preparan' los datos que se desean mostrar, cuando se quiere que una variable esté disponible para su visualización en la salida HTML es necesario asignársela al objeto Smarty con la función assign.

En la sección HTML lo nuevo es el uso de las expresiones como '{$nombre}'. Esto indica al compilador de Smarty que debe sustituir esta etiqueta por el valor de la variable $nombre que le fue asignado en la sección PHP.

En la sección de salida HTML generada se puede ver como todas las etiquetas de tipo {$<nombreEtiqueta>} han sido sustituidas por sus valores.

Otras características

  • Expresiones regulares
  • Bucles foreach, while
  • Sentencias condicionales if, elseif, else
  • Modificadores de variables (Todo a mayúsculas, o a minúsculas, etc...)
  • Funciones creadas por el usuario
  • Evaluación de expresiones matemáticas en la plantilla

Críticas

Los críticos de Smarty alegan la necesidad de aprender un nuevo pseudolenguaje, y cual sería la diferencia para los diseñadores entre aprender PHP o aprender Smarty. La documentación del proyecto está dividida en varias secciones, una de ellas titulada Smarty for designers (Smarty para diseñadores) en la que se detallan las funciones que deben ser utilizadas por estos. Además, el código Smarty es mucho mas comprensible, sencillo y mucho menos frágil que el código PHP.

Sitios que utilizan Smarty

Existe una gran cantidad de sitios utilizando Smarty como motor de plantillas, una lista mas completa se puede encontrar en http://smarty.incutio.com/?page=SitesUsingSmarty. Entre dichos sitios se pueden mencionar:

Véase también

PHP

Fuentes