[caracas-pm] HTML::Template ¿Se puede incluir un TMPL_VAR dentro del name de un TMPL_INCLUDE?

Ernesto Hernandez-Novich emhn at telcel.net.ve
Mon Sep 20 14:28:52 CDT 2004


On Mon, 20 Sep 2004, Alexis Arnal wrote:
> Estoy utilizando HTML::Template
>
> Actualmente estoy incluyendo un encabezado al sistema de la siguiente
> forma:
>
> <TMPL_INCLUDE name="/var/www/kit_html/cabecera.html">
>
> Pero tal como nos recomendaron en la reunión del Sábado estamos tratando
> de optimizar el prototipo mostrado el sábado haciendo que el sistema sea
> lo más independientemente posible de la plataforma,

Más que de la "plataforma", de la "instalación". Lo que debes buscar es
que no haya nombres "cableados" en los templates ni en los programas,
permitiéndote instalar en cualquier parte con mayor facilidad.

> para ello estamos implementando un archivo de configuración al cual se
> le hace un "require" para importar algunas variables como las rutas.

Buena idea.

> Esto funciona bien pero se presenta un problema con las Plantillas HTML.
>
> Lo que queremos es hacer algo parecido a esto:
>
> <TMPL_INCLUDE name="<TMPL_VAR name="cabecera">">
>
> siendo:
> 	$cabecera="/var/www/kit_html/cabecera.html"
> 	template->param(cabecera=>$cabecera);
>
> $cabecera se encuentrael cual se encuentra en un archivo aparte de
> configuración.

Lo que quieres hacer es tener un directorio cualquiera, digamos
/var/www/kit_templates, que contenga _todos_ los templates, y que cuando
uses el nombre "cabecera.html", se busque precisamente en ese
directorio. El módulo ya tiene esa funcionalidad

$base_de_templates = '/var/www/kit_templates';

my $template = HTML::Template->new( filename => 'foo.html',
                                    path => [ $base_de_templates ] );

buscará _automáticamente_ /var/www/kit_templates/foo.html, y si hay
TMPL_INCLUDE en foo.html, utilizará ese mismo directorio para buscar.
Puedes incluir varios directorios en el path si es necesario.

El mismo efecto se logra si utilizas la variable de ambiente
HTML_TEMPLATE_ROOT. Si usas las dos cosas, la variable de ambiente se
considera primero, y lo especificado en el new() después.

$ENV{HTML_TEMPLATE_ROOT} = '/var/www/templates:/var/www/mas_templates';

> Al parecer no puedo tener un TMPL_VAR dentro de un TMPL_INCLUDE o
> visceversa.

No se puede. Pero la única razón para querer hacerlo es buscar templates
con nombres "calculados", y para eso existen los métodos descritos
anteriormente.
-- 
Ernesto Hernández-Novich - On Linux 2.6.8.1 i686 - Unix: Live free or die!
Geek by nature, Linux by choice, Debian of course.
If you can't apt-get it, it isn't useful or doesn't exist.
GPG Key Fingerprint = 438C 49A2 A8C7 E7D7 1500 C507 96D6 A3D6 2F4C 85E3


More information about the caracas-pm mailing list