De Plantillas y demases: HTML_Template_IT

Enviado por clbustos el Sáb, 09/04/2005 - 02:07.

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

  1.  <?php
  2.   // Ejemplo de Template_IT con asignaci?n b?sica de variables
  3.   include_once ("HTML/Template/IT.php");
  4.   $tpl = new HTML_Template_IT('./plantillas');
  5.   $tpl->loadTemplatefile('template_1.html');
  6.   $tpl->setVariable("TITULO", "Este es el t?tulo");
  7.   $tpl->setVariable("BAR", "Esto se repite mucho");
  8.   $tpl->parse();
  9.   $tpl->show();
  10.  ?>

template_1.html

  1.  <html>
  2.  <head><title>Prueba 1 de Template_IT</title>
  3.  </head>
  4.  <body>
  5.  <h1>{TITULO}</h1>
  6.  {BAR} {BAR} {BAR} {BAR} {BAR}
  7.  </body>
  8.  </html>
  1. 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 con pear config-get php_dir y agregenla en el php.ini o a través de un ini_set('include_path','...').
  2. Instanciar un objeto HTML_Template_IT, el cual tiene como parámetro la ruta principal de las plantillas
  3. Cargar el archivo con la plantilla, en este caso plantilla_1.html
  4. 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
  5. 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

  1.  <?php
  2.   // Ejemplo de Template_IT con uso básico de secciones
  3.   include_once ("HTML/Template/IT.php");
  4.   $tpl = new HTML_Template_IT('./plantillas');
  5.   $tpl->loadTemplatefile('template_2.html');
  6.   for ($x = 0;$x<10;$x++) {
  7.   $tpl->setCurrentBlock("columnas");
  8.   for ($y = 0;$y<10;$y++) {
  9.   $tpl->setVariable("COL", $y);
  10.   $tpl->parseCurrentBlock();
  11.   }
  12.   $tpl->setCurrentBlock("filas");
  13.   $tpl->setVariable("FILA", $x);
  14.   $tpl->parseCurrentBlock();
  15.   }
  16.   $tpl->parse();
  17.   $tpl->show();
  18.  ?>
  19.  ?>

template_2.html

  1.  <html>
  2.  <head><title>Prueba 2 de Template_IT</title>
  3.  </head>
  4.  <body>
  5.  <h1>Prueba con secciones</h1>
  6.  <table>
  7.  <!-- BEGIN filas -->
  8.  <tr><td><b>Fila {FILA}</b></td>
  9.  <!-- BEGIN columnas -->
  10.  <td>Columna {COL}</td>
  11.  <!-- END columnas -->
  12.  </tr>
  13.  <!-- END filas -->
  14.  </table>
  15.  </body>
  16.  </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
  1.  <!-- BEGIN usuario -->
  2.  <p>Usuario : {nombre}</p>
  3.  <!-- BEGIN opcional -->
  4.  <p>Esta info es opcional:</p>
  5.  <ol><li>Teléfono:{telefono}</li><li>Dirección: {direccion}</li></ol>
  6.  <!-- END opcional -->
  7.  <!-- 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!

AdjuntoTamaño
plantilla_it.tgz1.19 KB
Imagen de Carlos Gutierrez

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.

Enviado por Carlos Gutierrez (no verificado) el Mié, 31/05/2006 - 15:47.
Imagen de clbustos

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....

Enviado por clbustos el Jue, 01/06/2006 - 01:39.
Imagen de Oswal

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

Enviado por Oswal (no verificado) el Jue, 03/07/2008 - 17:52.
Imagen de clbustos

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.

Enviado por clbustos el Dom, 06/07/2008 - 22:22.
Imagen de arturoeanton

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/

Enviado por arturoeanton (no verificado) el Lun, 22/09/2008 - 12:27.
Imagen de Jorgeriv

Hola, gracias por el artículo, es muy bueno, justo lo que buscaba, empezaré a hacer pruebas con este sistema de plantillas ahora mismo.

Enviado por Jorgeriv (no verificado) el Vie, 18/12/2009 - 15:07.
Imagen de akheron

Al parecer ese comentario tuyo de hacer el sistema compatible de sigma con python se oye bien. Por el momento estoy haciendo uso de sigma con php...la verdad se me complica un poco sin embargo con la sobresaturacion de codigos que tengo seguramente le terminaré entendiendo mas jojojo.

SALUDOS men.!!

Enviado por akheron (no verificado) el Mié, 13/01/2010 - 14:45.

Enviar un comentario nuevo

El contenido de este campo se mantiene como privado y no se muestra públicamente.
If you have a Gravatar account, used to display your avatar.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Saltos automáticos de líneas y de párrafos.

Más información sobre opciones de formato