Thread HTML::Template, dynamisches Include? (8 answers)
Opened by pKai at 2005-09-25 15:59

pKai
 2005-09-25 15:59
#5658 #5658
User since
2005-02-18
357 Artikel
BenutzerIn
[default_avatar]
Hallo,

Ich generiere mit HTLM::Template aus einem Template und eine Menge von "Content".html alle (statischen) Webseiten einer Site auf einem Rutsch nach folgendem Schema
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
use strict;
use warnings;
use HTML::Template;
my $ht = HTML::Template->new(filename => 'page.html');
my @files = liste_der_Content_html-Dateien();
for my $content (@files) {
my %pArgs = param_hash_bilden($content);
$ht->param(%pArgs);
open (F, ">../$file") or die $file;
print F $ht->output();
close F;
}


Problem: Da ich nur einmal new mache, kann ich im Template nicht <TMPL_INCLUDE NAME="festerName.html"> verwenden, da INCLUDE sozusagen statisch beim new passiert, ich den Namen aber erst beim param-Aufruf zur Verfügung habe.
Daher mache ich in param_hash_bilden sowas wie
Code: (dl )
1
2
3
4
5
6
7
sub param_hash_bilden {
my $file = shift;
open (I, $file) or die $file;
my $include;
{ local $/; $include = <I>; }
(INCLUDE => $include);
}

und in page.html benutze ich dann <TMPL_VAR NAME=INCLUDE>.
Gibt es statt dessen andere Möglichkeiten eines "dynamischen Includes"? Evtl. in anderen Template-Systemen (hab mir noch keine anderen angeguckt)?

Wenn ich jetzt dann allerdings in einem der Content-Dateien ebenfalss "templaten" will, bin ich doch noch gezwungen ein neuen HT-Objekt zu erstellen? (Im Moment mache ich es so:)
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
sub param_hash_bilden {
my $file = shift;
open (I, $file) or die $file;
my $include;
if (file_muss_templaten($file)) {
my $hti = HTML::Template->new (filehandle=>*I);
my %iArgs = include_param_hash_bilden($file);
$hti->param(%iArgs);
$include = $hti->output();
} else {
local $/;
$include = <I>;
}
(INCLUDE => $include);
}


Das ganze Vorgehen ist ja letztlich halbwegs akzeptabel für mich. Allerdings hatte ich gedacht ich ich könnte die geschachtelten HT-Objekte vermeiden.\n\n

<!--EDIT|pKai|1127649614-->
I sense a soul in search of answers.

View full thread HTML::Template, dynamisches Include?