A muchos programadores se nos ha inculcado este concepto, solemos trabajar en grupos de profesionales conformados por desarrolladores y diseñadores gráficos. Luego, que el diseñador a elaborado su propuesta gráfica, su diseño pasa al departamento de desarrollo para que a partir del mismo se elabore la programación.

Muchos profesionales de Internet suelen dedicarse al desarrollo de sitios, otros al desarrollo de aplicaciones. Para ambos casos el diseño juega un papel muy importante. Los que se dedican a la elaboración de sitios web, en muchos de los casos utilizan herramientas de terceros como Joomla!, Drupal, WordPress (por mencionar algunos).

Estas herramientas de uso general suelen incluir un sistema de plantillas para manejar una diversidad mayor de diseños. Cada uno, utiliza un motor diferente que realiza su cometido. Lo importante es destacar que estas soluciones utilizan un sistema de plantillas o diseños para cambiar la cara del sitio que se esta administrando.

Por qué es importante utilizar un sistema de plantillas

La principal razón es que de esta manera ahorramos tiempo cuando depuramos la aplicación. Una mala práctica de desarrollo consiste en embeber código de programación junto con el diseño y la maquetación. La mayoría de lenguajes de programación permiten esta práctica. El utilizar plantillas es importante por muchas razones:

  • Es más sencillo darle mantenimiento a un script que solo incluye programación.
  • Dependiendo de nuestra programación, nuestra aplicación no depende del diseño y permite cambiarlo sin tener que hacer cambios dramáticos en la parte de programación.
  • Ambos profesionales pueden dedicarse a su área de experiencia. Los programadores desarrollan y los diseñadores crean la vista de cara al usuario.

¿Qué es Smarty?

En el caso particular de programación en lenguaje PHP existen muchas soluciones para el manejo de plantillas. Smarty es un proyecto muy importante dentro del universo de paquetes desarrollados en PHP. Smarty es un motor de plantillas muy potentes y versátil con capacidades de expansión a través de submódulos, extensiones y funciones.

Los desarrolladores de Smarty supieron implementar un diseño de arquitectura de programación basado en el concepto de que una aplicación debe separar correctamente su lógica de programación de su diseño. Smarty incorpora una sistema de patrones de sintáxis para que dentro de la plantilla podamos incluir manejo y manipulación de variables; es decir dentro de una plantilla de Smarty puede hacerse programación.

Es importante mencionar que muchos proyectos importantes utilizan Smarty para el manejo de plantillas. Además, hay implementaciones de Smarty en otros lenguajes de programación como el caso de Canny desarrollado en Ruby y que puede interpretar las plantillas de Smarty.

Aparte de las ventajas antes mencionadas, Smarty es ideal para que los encargados del diseño puedan involucrase también en el desarrollo. Al separar la programación y diseño, los diseñadores pueden participar lo cual permite que el proceso del proyecto sea mucho más rápido a la vez que da al diseñador un panorama mejor en cuanto a su arquitectura.

Empezando a utilizar Smarty

En su modo más sencillo, Smarty recibe variables para su impresión dentro de la plantilla. Smarty trabaja a través de un objeto clase, las funciones más utilizadas serán:

$smarty->assign("ID_EN_PLANTILA", "VARIABLE"):  agrega la variable dentro del indice de variables de Smarty.
$smarty->display("NOMBRE_PLANTILLA"): despliegua y procesa la plantilla 

Ejemplo de inicialización de la variable de Smarty:

# Incluye la clase de Smarty
require "Smarty/libs/Smarty.class.php";                  

# Inicia el objeto
$smarty = new Smarty(); 

# Indica los directorios
$smarty->template_dir = "templates/";
$smarty->compile_dir  = "compiles/";
$smarty->caching      = false;
$smarty->cache_dir    = "cache/";
$smarty->config_dir   = "configs/"; 

# Manda variables a la plantilla
$smarty->assign("MY"        , $_SESSION["my"]);
$smarty->assign("TITLE_PAGE", "Smarty: Template Engine"); 

# Indica la plantilla
$smarty->assign("template.tpl"); 

Conceptos para la creación de plantillas en Smarty

En el ejemplo anterior se ilustra el método de inicialización del objeto de Smarty, la cual es bastante sencilla. Ahora bien, Smarty utiliza principalmente cuatro directorios:

template_dir: El directorio donde se almacenan las plantillas.

compile_dir: el directorio donde se almacenan los archivos compilados. Este directorio debe tener permisos de lectura y escritura en el servidor. Smarty utiliza un sistema bastante peculiar para compilar las plantillas. La clase lee el archivo de la plantilla y cuando la compila, deja indicado dentro del archivo la fecha de generación. Cuando se le vuelve a pasar al objeto que se procese la página, el motor verifica esa fecha y si no ha sufrido cambios, no lo procesa. Esto es importante, por que de esta manera no compila algo ya listo para ser utilizado y ahorra tiempo en el servidor.

config_dir: ya se menciono que Smarty tiene una sintáxis propia. Los archivos de configuración son un agregado del sistema. El objetivo es que dentro de estos se almacenen valores de configuración que no cambian pero que es importante que permanezcan como valores de constante. Dentro de estos archivos pueden clasificarse las constantes en secciones y dentro del TPL pueden referenciarse de un modo particular.

Conceptos:

Una plantilla puede incluir varias plantillas con lo cual se consigue una estructura de árbol, independiente del script. Smarty trabaja con todos los tipos de datos nativos en PHP. Otras implementaciones en otros lenguajes podrían variar en este funcionamiento.

La sintaxis de Smarty es muy similar a la de PHP, aunque con modificaciones. Por ejemplo las instrucciones se delimitan con llaves ( { } ) , pueden agregarse comentarios dentro de la plantilla ( { * * } ) , existen las estructuras de control IF y FOREACH (para el manejo de variables tipo Array) y otras variaciones de estructuras de control. Las variables se representan con el signo de ( $ ).

Existen funciones para manipulación de datos, generalmente suelen invocarse después de la referencia a la variable, a través del carácter ( | ), y los parámetros después de ( : ). Ejemplo: {$MY->username[strlen}

Consejos:

Aunque puede incluirse código de PHP dentro de la plantilla, esta práctica no es recomendada. Una buena práctica de programación consiste en enviar variables en arreglos sin ningún tratamiento en HTML para que la plantilla proceda a tratarla. Como se describió anteriormente, puede incluirse plantillas dentro de plantillas. Esto puede resultan beneficioso para optimizar aún más la plantilla, incluyendo porciones de plantilla en varios archivos.

Smarty es una gran solución de motor de plantillas. Contiene una gran arquitectura que puede ser ampliada según nuestras necesidades. Esta ha sido solo una pequeña introducción al paquete. En próximos artículos describiremos a mayor detalle cada una de las características dentro del sistema para que obtengamos el máximo desempeño del mismo.