> Manuales > Taller de PHP

Templates nativos en PHP con Plates. 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:

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.*")

Lo importante que debes haber aprendido en ese manual es cómo activar el sistema de autoload de composer en el código PHP, simplemente haciendo un require del archivo situado en vendor/autoload.php.

require "../vendor/autoload.php";

Una vez activado el sistema de autoload de Composer, podremos acceder a las dependencias instaladas desde cualquier parte del código, siempre que usemos correctamente su espacio de nombres (namespace).

Usar el sistema de plantillas Plates

Ya 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 League\Plates\Engine( '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 o absoluta. Yo he probado ambas y funciona. Me parece más lógico usar rutas relativas siempre que se pueda, pero también sirve indicar la ruta absoluta al directorio donde tienes 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

Antes de acabar queremos facilitarte un enlace a un repositorio de GitHub donde hemos colocado código de ejemplo que trabaja con el sistema de templates PHP Plates y usa un layout. Es un proyecto muy simple, pero que puede darte una idea más global sobre cómo organizar tus plantillas. Lo encuentras en https://github.com/deswebcom/plates-example

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.

Miguel Angel Alvarez

Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...

Manual