Sistemas de templates en PHP

Una de las recomendaciones más importantes para el desarrollo con PHP es el uso de sistemas de templates. Ya lo introdujimos en el artículo de buenas prácticas para PHP, pero volveremos a insistir en ello.

Por qué usar sistemas de templates

Los sistemas de templates nos permiten mejorar sensiblemente el código de las aplicaciones en general y de PHP en particular. Generalmente, cuando estamos aprendiendo PHP, posiblemente siguiendo los distintos tutoriales que encontramos en la web, nos enseñan que el código PHP se embebe dentro del código HTML. Esto está bien para comenzar con unos primeros pasos, pero a la hora de hacer aplicaciones complejas se queda muy corto.

El principal problema que nos encontramos es que nuestro código queda todo mezclado, la capa de presentación, el acceso a los datos, la lógica del negocio… De ese modo, si cualquiera de esas capas cambia, nos obliga a cambiar todo el código de la aplicación. Si las cosas son suficientemente complejas nos encontraremos ante un proyecto inmantenible.

Usando sistemas de templates la situación mejora mucho, pues podemos mantener separada la capa de presentación. En los templates se coloca simplemente el código HTML, con pocas instrucciones lógicas, pues nos limitamos a hacer bucles y condicionales sencillos. De este modo, el acceso a los datos y la lógica del negocio la podemos tener separada de la presentación. Si necesitamos cambiar el aspecto de la web no tendremos que preocuparnos por la lógica y el acceso a datos. O si los datos se acceden de otra manera, no nos afectará a la capa de presentación alojada en los templates.

Los sistemas de plantillas también nos permiten que la arquitectura de carpetas de un proyecto sea más ordenada, ya que generalmente colocaremos todas las vistas de la aplicación dentro de un directorio, organizadas por carpetas. También podremos tener grandes bloques de presentación divididos en pequeños bloques, que podrán ser fácilmente reutilizables.

Sistemas populares de templates en PHP

Antes de comenzar a enumerar los sistemas más populares, tenemos que diferenciar entre dos tipos de sistemas de templates:

  • Compilados: Generalmente porque usan códigos no estándar para la definición de condicionales, bucles y otras estructuras.
  • Nativos: Que están realizados en PHP plano, que no necesitan compilación, por no usar códigos propietarios.

Cada sistema puede ofrecer sus ventajas e inconvenientes y, aunque tradicionalmente son más populares los sistemas compilados, los nativos son más sencillos de usar y más recomendables en proyectos PHP donde no estemos aplicando frameworks. Otra ventaja de los sistemas de templates nativos es que no requieren el aprendizaje de un sub-lenguaje adicional.

Como desventaja de los sistemas nativos podríamos apuntar que permiten que el desarrollador acabe introduciendo en las vistas cualquier código PHP, que no sea exclusivo de la capa de presentación. Esto podría desvirtuar los beneficios del uso de templates.

Smarty:  Es quizás el más tradicional de los sistemas de templates de PHP, creado hace casi dos décadas, cuando el mundo del desarrollo PHP estaba casi en pañales. Es un sistema de templates compilado.

Twig:  Es el sistema de templates compilados que se usa dentro del framework Symfony, aunque es posible usarlo también de manera independiente en cualquier tipo de proyecto PHP.

Plates: Este sistema de templates es nativo y resulta bastante popular en la comunidad de PHP. Está inspirado en Twig y facilita enormemente el flujo de desarrollo de aplicaciones. Ya lo analizamos anteriormente en el artículo de Plates.

Mustache:  Un sistema de templates muy sencillo, que tiene la ventaja de usar una sintaxis común a muchos otros sistemas de templates que encontramos en diversos lenguajes.

Seguramente con estas alternativas encontrarás alguna que satisfaga tus necesidades. Lo ideal es echar un vistazo a la documentación y ver qué aspecto tienen las vistas generadas con cada uno de los sistemas, para quedarte con aquel que más atractivo te parezca. Al fin y al cabo, todos permiten hacer más o menos las mismas cosas.