Thread HTML::Template: verschachtelte Loops (2 answers)
Opened by maceis at 2011-09-08 20:39

maceis
 2011-09-08 20:39
#152251 #152251
User since
2005-01-05
4 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen,

ich habe Probleme, einen verschachtelten Loop mit HTML::Template zum Laufen zu bekommen.
Die diversen Threads zu dem Thema habe ich schon durch, komme aber immer noch nicht klar.

Ich habe eine einfachen verschachtelten Loop in einem Template.

Die Daten befinden sich in einem Hash, dessen Schlüssel im äußeren Loop in <TMPL_VAR name="Titel"> geschrieben werden soll.
Die Werte des Hasses sollen dann für den jeweiligen Schlüsseln in <TMPL_VAR name="Termin"> im inneren Loop geschrieben werden.

Hier mal ein Beispielskript auf Grundlage eines hier gefundenen Testskripts zur Erläuterung:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#!/usr/bin/perl -w
use strict;
use HTML::Template;

# open the html template
my $doc = <<ENDE
<TMPL_LOOP name="outer_loop">
<td>
<TMPL_VAR name="schluessel">
<TMPL_LOOP name="inner_loop">
<br /><TMPL_VAR name="daten">
</TMPL_LOOP>
</td>
</TMPL_LOOP>
ENDE
;
my $template = HTML::Template->new(scalarref => \$doc);

# Beispiedaten
my %thehash = (
Erster_Schluessel => [ 'a1', 'a2' ],
Zweiter_Schluessel => [ 'b1', 'b2', 'b3' ]
);

my (@outer_loop, @inner_loop, $schluessel, $daten);

foreach $schluessel (keys %thehash) {
my %outer_loop_row;
foreach my $daten (@{$thehash{$schluessel}}) {
my %inner_loop_row;
$inner_loop_row{"daten"} = $daten;
push (@inner_loop, \%inner_loop_row);
}
%outer_loop_row =(
schluessel => $schluessel,
inner_loop => \@inner_loop
);
push (@outer_loop, \%outer_loop_row);
}

$template->param(outer_loop => \@outer_loop);

print $template->output;


Die Ausgabe ist:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
    <td>
Erster_Schluessel

<br />a1

<br />a2

<br />b1

<br />b2

<br />b3

</td>

<td>
Zweiter_Schluessel

<br />a1

<br />a2

<br />b1

<br />b2

<br />b3

</td>


Die Ausgabe soll aber sein:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    <td>
Erster_Name

<br />a1

<br />a2

</td>

<td>
Zweiter_Name

<br />b1

<br />b2

<br />b3

</td>


Wie bekomme ich das hin?
gruß maceis

Eppur Si Muove (Gallileo Gallilei)

View full thread HTML::Template: verschachtelte Loops