Smarty: razones para utilizar plantillas en mis proyectos
Una de las prácticas más importantes dentro del mundo del desarrollo web es la separación del diseño y la programación. El programador y el diseñador suelen ser personas distintas e Internet maneja un propio concepto de desarrollo gráfico muy diferente a la programación de aplicaciones de escritorio.
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.
Gracias Juan Manuel !
Interesante artículo introductorio a Smarty y el uso de plantillas, me hubiera gustado ver más links referidos al tema, pero para eso tenemos a Google.
Saludos desde Chile
Freddy
La verdad seria esto lo correcto aunque me imagino que el nivel de programación sera alto para llevarlo acabo. Ahora a recopilar información a ver que me sale. Salu2
humildad ante todo verdad juan…..
Gracias por esta primera entrega, utilizar smarty desde mi punto de vista es un acierto, aunque si he de ser sincero esta opinión la hago desde la ignorancia de un principiante, aún no acabo de ver la mejor forma de utilizar smarty para que me sea util en mis proyectos web, espero que con las sucesivas entregas pueda aprender a utilizarlo de la forma más efectiva, gracias de nuevo y espero las siguientes entregas.
Bueno en lo honesto me gusta smarty es facil de implementar y no da muchos dolores de cabeza la unica razon que me vuelva a entrar en dicha clase es que deje de generar archivos cache aun asi estando apagado esa funcion directamente en la clase. tambien que cuando haga un submit me permita hacer la opcion de mostrar (Su registro a sido agregado) ya no uso esta clase en mis proyectos he decidido hacerme la mia propia si alguien sabe como resolver mi problema con smarty porfavor contactenme por que ni en el mismo foro de smarty consegui respuestas. Gracias !!!
Smarty es muy simple y fácil de usar. Pero, PHP por naturaleza es un Template Engine, se creo inicialmente con este propósito.
Si bien es bueno implementar plantillas, hay que tener en cuenta que estás degradan mucho el rendimiento de un sitio web.
Yo uso plantillas en mis proyectos, sobre todo cuando son multiidioma o están orientados a varios países (http://www.tusecreto.es por ejemplo), pero implementé un sistema de plantillas muy similar al de WordPress: 100% nativo con PHP, sin usar un seudo lenguaje.
Smarty lo he descartado, porque en un sitio web como este, de mediano tráfico (unas 20.000 páginas por día), hacía colapsar el servidor. La opción era pasarme a un servidor dedicado, o descartar Smarty y seguir en el server que estoy. Así que decidí implementar un sistema de plantillas propio.
Y en el caso de sitios web de alto tráfico, como http://www.meneame.net, son descartadas. Leí en algún lugar, que Ricardo Gallir no las usaba para mejorar la performance del sitio web.
Asi que las plantillas hay que manejarlo con sumo cuidado. Ganás por un lado, y perdés por el otro.
La verdad que Smarty se ha convertido indespensable en mi trabajo ya que me ayuda separar lo que es codigo php con Html , pero he tenido la necesidad de incorporar un gestor de Contenidos y juntado Smarty con WordPress , ustedes que opinan de esta mezcla ?? .
Actualmente tengo varios proyectos que funcionan asi , y no he tenido problemas.
Muy buen artículo, estoy iniciando en el uso de plantillas y en particular de Smarty y me ha servido mucho.
Saludos.
Llevamos ya varios años utilizando Smarty en webs de alto tráfico (más de 7 millones páginas al mes, o sea sobre las 225.000 diarias) y va de maravilla. No hemos notado nada que el rendimiento del servidor haya bajado (es un dedicado, eso sí), sino que gracias al sistema de plantillas, y especialmente al caché de smarty, podemos servir esa cantidad de páginas sin tener que atacar a la base de datos cada vez que se pide una página. En web con grandes volúmenes de acceso a base de datos (nuestro servidor de mysql puede tener más de 200 conexiones simultáneas), el tener páginas en caché es la diferencia entre estar online o estar offline.
Además, el tener separada la lógica de la presentación, es un gran ventaja para mantener el código, por no mencionar que cambiar el diseño de toda un site es realmente sencillo, y sin el miedo de si la web funcionará con el nuevo diseño o no, ya que las capas de lógica ni las tocas.
Juanma, con PHP de forma nativa puedes hacer exactamente lo mismo. Mantener separas las capas y te evitas aprender un seudo lenguaje
Me gustaría que dieran el link de algún tutorial para poder hacer que la gente pueda dejar comentarios en mi página y los comentarios se muestren en la misma página… se los agradecería infinitamente.
Ahi dejo mi correo.
Hola me gustaria que me dieran algun link o tutorial de los diferentes tipos de Motores de plantillas ,por supuesto los mas usados ahora…..
Por favor ahi les dejo mi correo para que lo manden graciassss
hola gente, me pueden decir como acentuar las palabras sin necesidad de utilizar á. es que estoy desarrollando una página dinamica, y a la hora de mostrar los datos, las palabras acentuadas no las reconoce.
Gracias.
Yo utilizo smarty en mis proyectos, por ejemplo, http://www.opinahotel.com y siempre he estado a la altura de mis requisitos. La cache, lo mejor que tiene!
hola mira estoy intentado apreder con tus post pero estoy liado con smarty
y el include no me deja ponerlo normal en el tpl coloco
{l}Tu Pais{/l}: {$host}
vale
pero en el php como asigno para que ejecute en la plantilla
echo geoip_country_name_by_addr($abir_bd, $_SERVER[\’REMOTE_ADDR\’]);
geoip_close($abir_bd);
seria solamente el echo logicamente creo que seria algo como
$tpl->assign(\’Sabir_bd\’ , $_SERVER[\’REMOTE_ADDR\’]);
pero esta mal vamos no salgo de aqui me ayudas a comprender gracias por escuchar
[…] http://www.maestrosdelweb.com/editorial/smarty-plantillas/ […]
Hola Pablo
Interesante tu comentario.
Estoy tratando de modificar una plantilla Prestashop y al leer tu comentario querría preguntarte si nos podrias decir ¿como lo has hecho tu la modificacion?
¿Que herramientas o programas has utilizado? y el nivel de dificultad es grande o mas bien sencillo.
Un saludo
Jesus
Hola a todos un saludo yo tambien trabajo con smarty actualemnete creo varios proyectos todos con smarty, en al actualidad se requiere el conocimiento de smarty para muchos proyectos les recomiendo aprenderlo ya que es demaciado facil de utilizar..
saludos Jimmy