Plates PHP, sistema de plantillas / templates

  • Por
Descripción, características y primeros pasos con Plates, el sistema de plantillas para PHP.

Las plantillas o en inglés templates es uno de los componentes típicos de una aplicación web. En PHP hay diversas librerías de plantillas y muchas muy populares como Smarty. En esta ocasión vemos un sistema de plantillas no tan popular pero que es bastante potente, sencillo y rápido.

Cuando trabajamos con sistemas de plantillas a veces tenemos que aprendernos nuevas sintaxis para realizar las operaciones típicas con las plantillas, inyección de datos en ellas, iteración sobre estructuras como arrays, etc. La sintaxis del sistema de plantillas suele ser diferente de la del propio lenguaje donde estamos trabajando y aunque eso generalmente tampoco es un problema muy serio (pues siempre esa sintaxis es sencilla y fácil de memorizar) obliga a que las plantillas se deban compilar antes de ser usadas.

En el caso de "Plates" tenemos un sistema de plantillas PHP nativo. Esto es, un sistema que no implementa nueva sintaxis, sino que usa la propia sintaxis y estructuras de control de PHP para poder expresar las operaciones típicas. Por tanto, tampoco requiere compilación de las plantillas como Twig o Smarty.

Su nombre viene de temPLATES y podemos encontrarlo en esta dirección: http://platesphp.com/

Es una solución ideal para todos los que prefieran expresar las plantillas con PHP, pero sin renunciar a funcionalidades de sistemas de plantillas avanzados. Está inspirado en Twig, el motor de plantillas de Symfony. Es rápido y te ayuda a solucionar diversas necesidades sin demasiadas complicaciones, léase:

  • Herencia en plantillas
  • Creación de múltiples layouts
  • Organización de las plantillas en directorios con espacios de nombres
  • Envío de datos a las plantillas y posibilidad de compartirlos entre varias
  • Extensibilidad por funciones o grupos de funciones (extensions)
  • Funciones de escape para los datos volcados en las plantillas
  • Independiente del framework o aplicación, adaptable a cualquier proyecto.

Instalación de PlatesPHP

La manera recomendada de instalar esta librería de plantillas es a través de Composer, donde será tan sencillo como indicar la dependencia. Lo encuentras en Packagist en esta URL: https://packagist.org/packages/league/plates

Solo tienes que agregar el require en tu composer.json. ("league/plates": "3.*")

Usar el sistema de plantillas Plates

Una vez instalada la dependencia (e invocado el autoload de Composer), para comenzar a usar tus templates debes instanciar la clase Engine, de la que depende todo el motor de plantillas.

$templates = new LeaguePlatesEngine( 'ruta/a/las/plantillas');

Como ves, al instanciar el Engine le debes indicar la ruta donde están tus plantillas.

Nota: La ruta de las plantillas puede estar en cualquier lugar del sistema de archivos del servidor. La documentación de Plates no informa muy bien si la ruta es relativa a un lugar u otro. Yo de momento estoy usando la ruta absoluta al directorio donde tengo las plantillas, por ejemplo: /var/www/ejemplo/application/views.

Si todas las plantillas las tienes en el mismo directorio, o subdirectorios de éste, ya lo tienes listo. Pero si acaso las prefieres organizar por diferentes directorios en rutas dispersas, no tienes más que agregarlos en el Engine.

$templates->addFolder('espacio_nombres_plantillas', 'otra/ruta/diferente');

Para ejecutar un template tenemos que indicar qué plantilla queremos renderizar. Hay diversas maneras, pero la más rápida es simplemente usar el método render() del Engine, indicando el nombre de la plantilla y los datos que le queramos enviar.

$templates->render("plantilla_a_renderizar", ["dato" => "Valor del dato"]);

La plantilla que se espera "plantilla_a_renderizar" tiene extensión ".php", pero podríamos modificarla si se desea, pero como ves, no hace falta indicar el ".php" en el nombre de la plantilla a invocar. Si la plantilla está en un subdirectorio puedes indicarlo con una barra.

$templates->render("subcarpeta/plantilla_a_renderizar");

Como ves, los datos que se envían a la plantilla se indican solo de manera opcional. Es decir, si no tenemos que enviarle datos, no necesitamos decirle nada. Los datos que llegan al script de la plantilla los encontrarás en el scope global, es decir, como si fueran variables globales.

Si la plantilla está en otra carpeta de las que guardaste con addFolder(), indicas el espacio de nombres de esa ruta con "::" separando al nombre de la plantilla que buscas.

$templates->render('espacio_nombres_plantillas::plantilla_a_renderizar');

Uso de Layouts

Generalmente todo sitio web tiene una cabecera y un pie. Con los layouts puedes conseguir que toda la estructura de la página (tanto la cabecera como el pie) estén en el mismo archivo.

Aquí puedes ver un layout: (archivo milayout.php)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>titulo de la empresa</title>
</head>
<body>
    <header>
        Logo de la empresa
    </header>
    <?=$this->section('content')?>
    <footer>
        Enlaces del pie
    </footer>
</body>
</html>

Como ves, el bloque $this->section('content') es lo que se colocará como cuerpo de la página para este layout.

Ahora puedes ver una plantilla que usa este layout.

<?php $this->layout('milayout') ?>
<p>Este es el cuerpo para esta página.</p>
<p>Me gusta PlatesPHP</p>

Con la primera línea $this->layout('milayout') estamos indicando que el HTML del layout que se va a usar está en milayout.php. El resto del documento es el cuerpo que se colocará en el template, una vez aplicado el layout.

Conclusión

Con este artículo te hemos contado muy muy por encima lo que se puede hacer con Plates y te hemos dado una de las muchas alternativas que existen para producir HTML a base de plantillas. Pero este artículo no te debe confundir, si quieres profundizar en Plates verás que el template system se puede hacer mucho más complejo. Es sencillo para quienes están comenzando con sistemas de plantillas en PHP, pero suficientemente avanzado para los que quieren aprovechar características avanzadas típicas de los motores de templates modernos.

El sitio de plates está bien documentado y es sencillo de leer y aprender sobre la marcha aquello que necesitamos. Solo falta un poco más de comunidad y tutoriales de terceras personas para aclarar posibles dudas.

Autor

Miguel Angel Alvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997, transformando su hobby en su trabajo.

Compartir

Comentarios

Alberto Marquez

23/4/2015
rendimiento templates
Quisiera saber el rendimiento de los templates compilados en relación al de los templates nativos. Entre ventajas e inconvenientes ¿que es lo más indicado?

Enzo

23/7/2015
como drscargarlo
No entiendo como usarlo. No tengo que hacer un include del sistema de plantilla antes de instanciarlo??? No uso comppser. Uso phpdesigner. Gracias!!!