2010-08-27 15 views
5

Tengo que mostrar diferentes formularios médicos según el estado en el que se encuentre el usuario. También hay un formulario predeterminado que comparten muchos de los estados. Todos estos formularios médicos están escritos en Template Toolkit y están incluidos en plantillas más grandes. El estado está disponible como una variable en una forma normalizada.¿Puedo configurar la herencia de la plantilla dentro de una plantilla? (Template Toolkit)

Necesito seleccionar la plantilla específica del estado, si existe, de lo contrario volveré al valor predeterminado. ¿Cómo podría hacer esto?

INCLUDE_PATH ya se está utilizando para controlar la conmutación entre estilos de sitio.

Respuesta

6

Algo como esto debe hacer el trabajo:

main.tt:

This is a main template [% GET state %] 
[% SET iname = state _ ".tt" %] 
[% TRY %] 
[% INCLUDE "$iname" %] 
[% CATCH %] 
[% INCLUDE default.tt %] 
[% END %] 
End of main template 

default.tt:

This is default template 

s1.tt:

This is template for state s1. 

t .pl:

#! /usr/bin/perl 
use 5.006; 
use strict; 
use warnings; 

use Template; 
my $tt = Template->new(); 
$tt->process("main.tt", { state => "s1" }) 
    || die $tt->error, "\n"; 
print "---------\n"; 
$tt->process("main.tt", { state => "unknown" }) 
    || die $tt->error, "\n"; 

Cuando se ejecuta t.pl:

This is a main template s1 
This is template for state s1. 
End of main template 
--------- 
This is a main template unknown 
This is default template 
End of main template 
+0

que parece que se va a trabajar, gracias! Y puedo abstraerlo en una plantilla de utilidad para poder hacer algo como '[% INCLUDE" util/bystate "template =" some_form.tt2 "]' – Schwern

Cuestiones relacionadas