Capítulo 1. Que es Smarty?
Smarty es un motor de plantillas para PHP. Mas especificamente, esta
herramienta facilita la manera de separar la aplicación lógica y el
contenido en la presentación.
La mejor descripción esta en una situación donde la aplicación
del programador y la plantilla del diseñador juegan diferentes roles,
o en la mayoria de los casos no la misma persona.
Por ejemplo:
Digamos que usted crea una pagina web, es decir, despliega el articulo
de un diario. El encabezado del articulo, el rotulo, el autor y el
cuerpo son elementos del contenido, estos no contiene información de
como quieren ser presentados. Estos son pasados por la aplicación
Smarty, donde el diseñador edita la plantilla, y usa una combinación de
etiquetas HTML y etiquetas de plantilla para formatear la presentación
de estos elementos (HTML, tablas, color de fondo, tamaño de letras,
hojas de estilo, etc...).
Un día el programador necesita cambiar la manera de recuperar el
contenido del articulo(un cambio en la aplicación lógica.). Este
cambio no afectara al diseñador de la plantilla, el contenido llegara a
la plantilla exactamente igual. De la misma manera, si el diseñador de
la plantilla quiere rediseñarla en su totalidad, estos cambios no
afectaran la aplicación lógica.
Por lo tanto, el programador puede hacer cambios en la aplicación lógica
sin que sea necesario restructurar la plantilla. Y el diseñador de la
plantilla puede hacer cambios sin que haya rompimiento con la aplicación
lógica.
One design goal of Smarty is the separation of business logic and
presentation logic. This means templates can certainly contain logic under
the condition that it is for presentation only. Things such as including
other templates, altering table row colors, upper-casing a variable,
looping over an array of data and displaying it, etc. are all examples of
presentation logic. This does not mean that Smarty forces a separation of
business and presentation logic. Smarty has no knowledge of which is which,
so placing business logic in the template is your own doing. Also, if you
desire no logic in your templates you certainly can
do so by boiling the content down to text and variables only.
Ahora un pequeño resumen sobre que no hace Smarty. Smarty no intenta
separar completamente la lógica de la plantilla. No hay problema entre la
lógica y su plantilla bajo la condición que esta lógica sea
estrictamente para presentación.
Un consejo: mantener la aplicación lógica fuera de la plantilla, y la
presentación fuera de la aplicación lógica.
Esto tiene como finalidad tener un objeto mas manipulable y escalable para
un futuro proximo.
Un único aspecto acerca de Smarty es la compilación de la plantilla.
De esta manera Smarty lee la plantilla y crea los scripts de PHP. Una vez
creados, son executados sobre él.
Por consiguiente no existe ningún costo por analizar gramaticalmente
cada archivo de template por cada requisición, y cada template puede llevar
toda la ventaja del compilador de cache de PHP tal como Zend Accelerator
(http://www.zend.com/) o PHP Accelerator
(http://www.php-accelerator.co.uk).
Algunas de las características de Smarty:
Es extremamente rápido.
Es eficiente ya que puede interpretar el trabajo mas sucio.
No analiza gramaticalmente desde arriba el template, solo compila una vez.
El esta atento para solo recompilar los archivos de plantilla que fueron
cambiados.
Usted puede crear
funciones habituales
y modificadores de variables
customizados, de modo que el lenguaje de la platilla es altamente extensible.
Sintaxis de etiquetas delimitadoras para configuración de la plantilla,
así lo puede usar {}, {{}}, <!--{}-->, etc.
Los construtoress if/elseif/else/endif son pasados por el interpretador
de PHP, así la sintaxis de la expresión {if ...} puede ser compleja o
simple de la forma que usted quiera.
Permite un anidamiento ilimitado de sections, ifs, etc.
Es posible incrustar directamente codigo PHP en los archivos de plantilla,
aunque esto puede no ser necesario(no recomendado) dado que la herramienta
se puede ajustar.
Soporte de caching incrustado
Fuentes de Plantilla absoluto
Funciones habituales de manipulación de cache
Arquitectura de Plugin