De Plantillas y demases: HTML_Template_IT
Para que no digan que no trabajo o que no me preocupo por ustedes, acá va una explicación de como funciona un clásico sistema de plantillas basadas en expresiones regulares, llamado Template_IT. Como es un paquete PEAR, bastaría con hacer pear install HTML_Template_IT para que se instalará en su bicho, si tienen *nix.
Por si las moscas, Template_Sigma tiene exactamente la misma interfaz, pero agrega una suerte de 'compilación' del primer procesamiento de las expresiones regulares. Si les gusta IT y sus plantillas se vuelven cada vez más gigantescas, es tiempo de usar Sigma o, mejor aún, php directo :P
Como usar HTML_Template_IT
Nada mejor que poner un ejemplo básico
template_1.php
- // Ejemplo de Template_IT con asignaci?n b?sica de variables
- include_once ("HTML/Template/IT.php");
- $tpl = new HTML_Template_IT('./plantillas');
- $tpl->loadTemplatefile('template_1.html');
- $tpl->setVariable("TITULO", "Este es el t?tulo");
- $tpl->setVariable("BAR", "Esto se repite mucho");
- $tpl->parse();
- $tpl->show();
template_1.html
- <html>
- <head><title>Prueba 1 de Template_IT</title>
- </head>
- <body>
- <h1>{TITULO}</h1>
- {BAR} {BAR} {BAR} {BAR} {BAR}
- </body>
- </html>
- Como se darán cuenta, se debe incluir el archivo
HTML/Template/IT.php. Para que la inclusión sea correcta, su include_path del php.ini debe considerar la ruta donde están los paquetes PEAR. Para ello, revisen la ruta de PEAR conpear config-get php_diry agregenla en el php.ini o a través de unini_set('include_path','...'). - Instanciar un objeto HTML_Template_IT, el cual tiene como parámetro la ruta principal de las plantillas
- Cargar el archivo con la plantilla, en este caso
plantilla_1.html - Se asignan las variables con la función
setVariable(). Como ven, el nombre de la variable va entre "{" y "}" en la plantilla. Esto puede ser alterado, si es necesario - Finalmente, se procesa (
parse()) y se muestra (show())la plantilla
Uso de secciones
Todo sistema de plantillas que se precie debe dar cuenta de manejar datos repetidos. Template_IT ocupa un sistema que me gusta llamar 'cocinero'.
¿Cómo esto? Bueno, si quieren hacer muchos sanguchitos, lo primero es abrir el pan, poner la carne, el queso, el tomate, cerrar el pan, ponerlo en un plato y lo mismo con el siguiente. En el fondo, parten completando lo que hay dentro del pan, para después cerrarlo. Lo mismo con Template_IT
Les muestro el ejemplo y lo comentamos de inmediato
template_1.php
- // Ejemplo de Template_IT con uso básico de secciones
- include_once ("HTML/Template/IT.php");
- $tpl = new HTML_Template_IT('./plantillas');
- $tpl->loadTemplatefile('template_2.html');
- for ($x = 0;$x<10;$x++) {
- $tpl->setCurrentBlock("columnas");
- for ($y = 0;$y<10;$y++) {
- $tpl->setVariable("COL", $y);
- $tpl->parseCurrentBlock();
- }
- $tpl->setCurrentBlock("filas");
- $tpl->setVariable("FILA", $x);
- $tpl->parseCurrentBlock();
- }
- $tpl->parse();
- $tpl->show();
- ?>
template_2.html
- <html>
- <head><title>Prueba 2 de Template_IT</title>
- </head>
- <body>
- <h1>Prueba con secciones</h1>
- <table>
- <!-- BEGIN filas -->
- <tr><td><b>Fila {FILA}</b></td>
- <!-- BEGIN columnas -->
- <td>Columna {COL}</td>
- <!-- END columnas -->
- </tr>
- <!-- END filas -->
- </table>
- </body>
- </html>
La idea, por si no se dieron cuenta, es crear un tabla de 11x10, en la cual cada fila se inicie con una casilla que diga 'Fila ', a la cual le siguen otras 10 columnas, que van subiendo en valor.
El código HTML es bastante claro, así que no creo que merezca mucha explicación. Cada sección se inicia con un comentario del tipo <!-- BEGIN seccion --> y termina con <!-- END seccion -->.
El código php es el raro. La idea es utilizar los bloques internos y luego los más externos. En este caso, primero le decimos a la plantilla que ocuparemos el bloque interno (setCurrentBlock('columnas')), asignamos el valor y procesamos el bloque (parseCurrentBlock()). Una vez que hayamos creado las columnas que necesitamos, procedemos a crear la fila con el mismo procedimiento.
Uso de Variables y Bloques Vacíos
Una de las gracias de Template_IT es que, por defecto, elimina las variables que no conoce y las secciones a las cuales no se les asigna ningún valor de variable. Esto puede servir, por ejemplo, cuando existe una serie de datos opcionales que muy pocas veces se presentan, por lo que es mejor eliminar todo el bloque de datos antes que dejarlo vacío. La idea es utilizar una estructura como la siguiente- <!-- BEGIN usuario -->
- <p>Usuario : {nombre}</p>
- <!-- BEGIN opcional -->
- <p>Esta info es opcional:</p>
- <ol><li>Teléfono:{telefono}</li><li>Dirección: {direccion}</li></ol>
- <!-- END opcional -->
- <!-- END usuario -->
Si no asignamos ningún valor a 'telefono' o a 'direccion', a la hora de parsear el bloque 'usuario', todo el bloque 'opcional' desaparecerá. Ahora bien, basta con que ingresemos un valor y el bloque aparecerá completo.
Otra característica de IT es que cualquier variable que no sea asignada simplemente desaparece. Por ejemplo, en el caso anterior, si no asignamos la variable 'telefono', no se genera error y queda en blanco el lugar respectivo.
Este comportamiento puede ser alterado con las propiedades removeEmptyBlocks y removeUnknownVariables. Remito al ejemplo adjunto al artículo para que puedan ver como funciona.
Eso sería todo por hoy. Después veremos que tal funciona Xipe!
| Adjunto | Tamaño |
|---|---|
| plantilla_it.tgz | 1.19 KB |
- 6793 lecturas

Holas, muy interesante la web. una consulta, sabes si es necesario utilizar ob_start() y demas funciones cuando uno trabaja con smarty?
Gracias por las respuestas.
Estimado:
Smarty ocupa ob_start para almacenar los resultados de las plantillas compiladas. Ahora, como los buffering van anidados, eso no impide que puedas realizar buffering en el texto que tu desees, para enviarlo después como una variable a smarty.
De más está decir que no te recomiendo para nada smarty....
Hola, qué tal?
¿Hay algún problema en las iteraciones de las filas de la tabla al usar php5?
Mi pregunta se debe a que tengo una aplicación desarrollada para php4 y ahora hemos cambiado a php5, en la versión que usa php4 se ven bien los resultados en las tablas, pero en la versión de php5 se repiten los resultados en todas las filas.
Gracias
Revisa si tu versión de Template IT está actualizada, porque aquí en mi máquina con Gentoo, PHP 5 y Template IT 1.2.1 funcionan todos los ejemplos de esta página.
Me gustaría saber su opinión de la idea de hacer un sistema de template compatible con Sigma en python, que publique en mi el blog http://binsd.wordpress.com
El link al la entrada correspondiente es
http://binsd.wordpress.com/2008/09/19/usar-los-template-de-ya-hechos-en-sigma-en-python/
Enviar un comentario nuevo