Parser

Antes de pasar al código haré una pequeña introducción del por qué de esta clase, para los desesperados pueden hacer click aquí donde les llevará al código fuente directamente.

La clase template parser ( tpl ) es una clase que ayuda a mejorar la integridad de los templates dentro de nuestro código leafwork. Un buen diseño es aquel que, aparte de funcionar correctamente y estar bien codificado, no mezcla capas. Con ello quiero hacer referencia, por ejemplo, a sentencias de bases de datos embebidas, código html dentro de PHP etc.

Es frecuente sobretodo en los que se inician en el lenguaje que, cuando realizan una página web, meter código HTML dentro del PHP de esta forma:

<?php
// Esto es un código de ejemplo de lo que está mal.. 
 
$contenido = '<div id="cabecera">';
$contenido.= $cabecera;
$contenido.= '</div>';
$contenido.= '<div style="width:500px;>Este es otro div</div>';
 
for( $i = 0 ; $i < 10 ; $i++ )
   $contenido .= 'El numero '.$i.'<br />';
 
echo $contenido;
 
?>

Realmente no tiene ningún problema ya que funciona pero puede resultar algo molesto de mantener a la larga pues, imagina que el diseño cambia de tamaño y tienes que estar cambiando en todos los archivos el contenido. Habrá alguien que piense.. “bueno, pues si lo hago con CSS no importa” pero.. ¿y si hablamos de otro diseño diferente? O si en particular sólo quieres tocar algún pedacito de diseño. Pues para eso está ideada esta clase.

En sí lo principal es desglosar el código html en pequeñas porciones editables mediante variables, código php u otros templates del mismo estilo. El formato que siguen las páginas es el siguiente:

–CABECERA
Código HTML con variables embebidas
–!CABECERA

Donde cabecera puede ser la palabra que queramos para describir ese código, podríamos decir que es como el ID de los elementos. Empieza con dos ( 2 ) guiones seguido de la palabra en mayúsculas y terminar con dos guiones, un signo de exclamación y la misma palabra. En medio de estas etiquetas es donde va el código HTML. Como bien mencioné antes, este puede tener variables, código php e incluso otros templates.

Ejemplo:

--SALUDAR
<div style="border:1px solid black; padding:10px;">
Hola ${USERNAME}! Bienvenido a ${WEBNAME}.<br />
Hoy es d&iacute;a $PHP{ return date('d/m/y'); } y este es mi $TMP{ boton_azul }
</div>
--!SALUDAR
--BOTON_AZUL
<a style="background: blue; color: white; padding: 2px;">${TEXTO}</a> 
--!BOTON_AZUL

Ambos no tienen por qué estar separados, pueden estar juntos siempre y cuando sea en un archivo de extensión “php” ( recomendada ) ó “tpl” dentro de la carpeta template/pages/ el archivo da igual cómo lo llamemos aunque conviene que sea un nombre descriptivo para poder encontrarlo mejor en caso de duda.

Podemos ver en los códigos de ejemplo las distinciones de código inmerso. Por una parte vemos un formato del estilo ${VARIABLE} que son variables simples de sustitución. Por otro lado vemos $PHP{ Código }; que sirve por si algún manitas quiere insertar código PHP en su template ( por ejemplo $PHP{ return date(‘d/m/y’); } ). OJO el bloque de PHP DEBE terminar con una llave de cierre y punto y coma “};” ya que a diferencia de las variables o los templates que veremos ahora, el PHP puede tener sentencias compuestas.

Por último hablaré de la inclusión de bloques te template dentro de templates. Suena algo extraño pero podría ser útil en alguna ocasión. Se trata de meter, como bien he dicho antes, un bloque dentro de otro con $TMP{ NOMBRE_TEMPLATE }. Lo que hace es incluir un bloque del MISMO archivo e interpreta las variables que le sean pasadas al global. Un template dentro de otro template NO interpreta PHP aunque es posible que en futuras versiones sí lo haga.

Ejemplo:

–SALUDO
Hola ${USERNAME}. Este es un enlace $TMP{ boton_prueba }.
–!SALUDO

–BOTON_PRUEBA
<a style=”color: blue;”>de color ${COLOR}</a>
–!BOTON_PRUEBA

El resultado una vez esté ejecutado será “Hola Juan. Este es un enlace de color azul.


Pero, ¿dónde están esas variables? 

La respuesta es simple, en nuestro código libre de impurezas y códigos html :-) . Para llamar al parser hay que hacerlo de la siguiente forma:

Ejemplo:
- página: test.php ó test.tpl dentro de /template/pages/
- contenido de esa página:
 

En nuestro index ( o cualquier otra página y/o módulo ) ponemos lo siguiente:

<?php
require('leaf/run.php');
$parametro['USERNAME'] = 'Carmelito';
$parametro['WEBNAME'] = 'LeafWork';
$parametro['TEXTO'] = 'botoncito :-)';
echo lw('tpl')->parse( 'test:saludar' , $parametro );
?>

Y el resultado, una vez se ejecute en el navegador será…

 

En el ejemplo se puede ver cómo se han mezclado los tres elementos en uno y como funciona de maravilla ( toquemos madera para que siga así ).

Como despedida paso a explicar los parámetros de la función:

echo lw('tpl')->parse( 'test:saludar' , $parametro );

lw como saben es la clase maestra, tpl es la clase parser actual. Como primer parámetro se le pasa una string compuesta de “nombre_de_fichero” ( dos puntos ) “bloque a mostrar”. Como segundo parámetro el array con los parámetros aunque esto es opcional pues puedes también insertar partes sin necesidad de cambiar variables.

Hasta pronto.

 
Powered by Wordpress. Design by Bingo - The Web Design Experts.