Mojolicious::Lite 6 Patrones, reutilizando partes

Vamos a empezar a ver formas, para hacer bloques o módulos con patrones.

Layouts. Plantillas

#!/usr/bin/env perl
use Mojolicious::Lite;

get 'index';
app->start;

__DATA__

@@ index.html.ep
% layout 'base';
% title "Esto es una prueba de página web";
<h2>Esto es una prueba de plantilla</h2>
  
@@ layouts/base.html.ep
  <!doctype html>
  <html>
  <head>
  <title> <%= title %> </title>
  </head>
  <body>
  <%== content =%>
  </body>
  </html>

<!doctype html>
  <html>
  <head>
  <title> Esto es una prueba de página web </title>
  </head>
  <body>
<h2>Esto es una prueba de plantilla</h2>
  
  </body>
  </html>

Una plantilla, (layout), es un patrón (template), que incluye el contenido de otro patrón. Esto permite poder utilizar una plantilla con contenidos diferentes.

Lo que hay que hacer:

  1. El patrón tiene que declarar que plantilla va a utilizar con el helper layout
  2. Las plantillas, layouts, se guardan en el directorio ‘templates/layouts’ a partir del directorio raíz de la aplicación. Una plantilla en la sección data tiene que especificarlo anteponiendo layouts/ al nombre
  3. El helper content, en la plantilla, incorpora el contenido procesado del patrón, a la plantilla.

Además, en este ejemplo se utiliza el helper title en el patrón, para guardar el contenido del título en el patrón, y también, para recuperarlo en la plantilla.

Esto es, la misma función haciendo dos cosas diferentes.

layout y title son dos funciones auxiliares, helpers, predefinidas por Mojolicious.

Para entender cómo funciona esto, aparte de aplicar la receta, hay que entender otros conceptos de Mojolicious, el controlador (controller) y el almacén (stash).

El helper include

#!/usr/bin/env perl
use Mojolicious::Lite;

get 'index';
app->start;

__DATA__

@@ index.html.ep
 % title 'Prueba de Include';
 %= include 'cabeza'
  <h2> Prueba de Include </h2>
%= include 'pie'

@@ cabeza.html.ep
  <!doctype>
  <html>
  <head>
  <title> <%= title %></title>
  </head>
  <body>
  
@@ pie.html.ep
  <div>
  <h4>Pié de página</h4>
  </div>
  </body>
  </html>

 <!doctype>
  <html>
  <head>
  <title> Prueba de Include</title>
  </head>
  <body>
  

  <h2> Prueba de Include </h2>
  <div>
  <h4>Pié de página</h4>
  </div>
  </body>
  </html>

include es un helper, una función auxiliar, que permite incluir un patrón en otro. Con esto podemos crear patrones por partes, y añadir las partes necesarias.