Thread Template Toolkit: BLOCK + WRAPPER (14 answers)
Opened by bloonix at 2007-06-13 00:50

bloonix
 2007-06-13 00:50
#77462 #77462
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Hallo liebe Community,

heute bin ich in den Genuss des WRAPPERs von CPAN:Template gekommen.
Mein Gedanke war es, alle Templates zu Begin des FastCGI-Prozesses in
eine Hashstruktur zu laden und im Speicher zu halten, um die Platten-
zugriffe zu minimieren. Mein altes Konstrukt hat da natürlich nicht
mitgespielt...

Bislang habe ich meine Struktur immer wie folgt aufgebaut (so wie ich es
auch zu Zeiten mit HTML::Template gemacht habe):

beispiel.tmpl
Code: (dl )
1
2
3
4
5
6
[% INCLUDE header.tmpl %]
[% INCLUDE navigation.tmpl %]

<p>Mein Content</p>

[% INCLUDE footer.tmpl %]


Dabei enthält header.tmpl immer die gesamten Header Informationen,
angefangen mit <html> und endend mit </head>... navigation.tmpl
entält immer meine Navigationsleiste und footer.tmpl den Abschluss...
so schaut es zumindest meistens aus.

Da mir das aber - wie schon geschrieben - zuviele Plattenzugriffe sind und
es sogut wie unmöglich ist, auf Templates mit INCLUDE zuzugreifen, die
in einer Hashstruktur liegen, habe ich dann einen Tipp zu dem WRAPPER
bekommen.

Nun habe ich mir folgendes überlegt (beispielhaft):

main.tmpl
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[% BLOCK main %]
<html>
<head>
  <title>[% title %]</title>
</head>
<body>
<ul>
[% FOREACH link = links %]
  <li>[% link %]</li>
[% END %]
</ul>
[% content %]
</body>
</html>
[% END %]


index.tmpl
Code: (dl )
1
2
3
4
5
6
[% WRAPPER main
  title = 'Meine Homepage'
  links = [ 'foo', 'bar', 'baz' ]
%]
<p>Mein Content</p>
[% END %]


test.pl
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
use Template;

my $t = Template->new(
  INCLUDE_PATH => '.',
  PRE_PROCESS  => 'main.tmpl'
) or die $!;

open my $fh, '<', 'index.tmpl' or die $!;
my $template = do { local $/; <$fh> };
close $fh;

while ( sleep 1 ) {
  $t->process(\$template) or die $!;
}


Ausgabe
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<html>
<head>
  <title>Meine Homepage</title>
</head>
<body>
<ul>

  <li>foo</li>

  <li>bar</li>

  <li>baz</li>

</ul>

<p>Mein Content</p>

</body>
</html>


Ich lade also zuerst main.tmpl worin alle meine BLOCKs definiert sind und
kann dann nachher individuell in den anderen Templates den Content mit
dem WRAPPER zusammen basteln, dabei liegt alles schön im Speicher und
läuft recht fix.

Ich weiß, ich bin bestimmt nicht der erste, der darauf gekommen ist. :)

Nun meine Frage... wie macht ihr das so und habt ihr vielleicht noch Tipps
oder Anregungen, wie man es eventuell noch besser machen könnte?

Bzgl. Speicher... die Gesamtgröße aller Templates ist ca. 1 MB und bei
knapp 100 FastCGI Prozessen sind das verkraftbare 100 MB Haupt-
speicher.

Viele Grüße,
opi
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.

View full thread Template Toolkit: BLOCK + WRAPPER