2010-08-27 9 views
5

Devo visualizzare diverse forme mediche in base a quale stato è l'utente. Esiste anche un modulo predefinito condiviso da molti stati. Queste forme mediche sono tutte scritte in Template Toolkit e sono incluse in modelli più grandi. Lo stato è disponibile come variabile in una forma normalizzata.Posso impostare l'ereditarietà del modello all'interno di un modello? (Template Toolkit)

Devo selezionare il modello specifico dello stato, se esiste, altrimenti tornare all'impostazione predefinita. Come farei meglio a fare questo?

INCLUDE_PATH è già in uso per controllare il passaggio tra gli stili del sito.

risposta

6

Qualcosa del genere dovrebbe fare il lavoro:

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"; 

Quando si esegue 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

che sembra che sarà il lavoro, grazie! E posso estrapolarlo in un modello di utilità in modo che possa fare qualcosa come '[% INCLUDE" util/bystate "template =" some_form.tt2 "]' – Schwern

Problemi correlati