Schrift
[thread]954[/thread]

HTC und HTML-Tabellen: zweidimensionales LOOP

Leser: 1


<< >> 6 Einträge, 1 Seite
MartinR
 2007-07-05 13:25
#274 #274
User since
2004-06-17
305 Artikel
BenutzerIn
[default_avatar]
Hi,

ich verwende für eine Website HTML::Template::Compiled.

Nun muss ich eine HTML-Tabelle erstellen. Bisher auch nie ein Problem mittels eines LOOP. Da nun aber diese Tabelle in Zeilen- und Spaltenzahl variabel sein muss überlege ich wie ich das am besten mache. Ich habe es schon probiert zwei Loops zu verschachteln - was auch zum gewünschten Ergebnis führt. Da aber in der ersten Zeile Überschriften in die Spalten (wie gesagt - Anzahl variabel) gesetzt werden und in die weiteren Zeilen (wie gesagt - Anzahl auch variabel) dann erst die Daten - wobei jeweils in der ersten Zelle einer Zeile ebenfalls eine Zeilenbeschreibung steht - finde ich das ein wenig umständlich von der Programmlogik.

Frage: Gibt es in HTC so eine Art Zweidimensionales LOOP ?
pq
 2007-07-05 14:20
#275 #275
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
also ich verstehe das problem nicht.
kannst du vielleicht ein kurzes beispiel posten?
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
bloonix
 2007-07-05 22:21
#276 #276
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Ich habe eine gewisse Vorstellung von dem was du möchtest und vielleicht
ist das folgende Stück etwas für dich... wenn es stimmt, dann müsstest
du es nur für HTML-Template-Compiled abändern.

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
use strict;
use warnings;
use Template;

my @rows = (
  { foo => 1, bar => 1, baz => 1 },
  { foo => 2, bar => 2, baz => 2 },
  { foo => 3, bar => 3, baz => 3 },
  { foo => 4, bar => 4, baz => 4 },
);

my @titles = sort keys %{$rows[0]};

my $t = Template->new();
$t->process(\*DATA, { rows => \@rows, titles => \@titles });

__END__
<table>
  <tr>
  [%- FOREACH title = titles %]
     <th>[% title %]</th>
  [%- END %]
  </tr>
  [%- FOREACH terms = rows %]
  <tr>
     [%- FOREACH term = terms.keys.sort %]
     <td>[% terms.$term %]</td>
     [%- END %]
  </tr>
  [%- END %]
</table>


Output:
<table>
  <tr>
     <th>bar</th>
     <th>baz</th>
     <th>foo</th>
  </tr>
  <tr>
     <td>1</td>
     <td>1</td>
     <td>1</td>
  </tr>
  <tr>
     <td>2</td>
     <td>2</td>
     <td>2</td>
  </tr>
  <tr>
     <td>3</td>
     <td>3</td>
     <td>3</td>
  </tr>
  <tr>
     <td>4</td>
     <td>4</td>
     <td>4</td>
  </tr>
</table>
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.
MartinR
 2007-07-05 22:59
#277 #277
User since
2004-06-17
305 Artikel
BenutzerIn
[default_avatar]
@opi
Danke, werd ich mir mal ansehen

@pq
Ich hab mich ja mit meiner Fragestellung schon schwer genug getan ;-)

Aber hier ein Beispiel einer Tabelle. Datenbasis ist z.B., dass es mehrere Teams gibt, die über Kalendertage verteilt bestimmte Bedingungen erfüllen müssen die es zu zählen gibt. Bei der Ausgabe soll es aber nun frei wählbar sein wieviele Teams und welcher Zeitraum angezeigt werden soll.

Wie schon gesagt. Ich verwende z.Zt. LOOPs in LOOPs wie sie in der HT-Docu unter <TMPL_LOOP>s within <TMPL_LOOP>s beschrieben sind und das funktioniert auch einwandfrei. Ich hatte nur so eine Idee, ob es nicht mit einem einzigen LOOP auch gehen könnte, dass dann eben irgendwie zweidimensional sein müsste. Ich dachte schon fast daran mir die ganze Tabelle mit CGI.pm zu erstellen, scheiterte dann aber daran, dass ich auch noch die einzelnen Zellen je nach Wert per CSS formatieren möchte (fehlt aber in meinem Code unten) und mir die HTC-Variante besser gefällt.


Aus dem Template ...
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
<table>

<tr>
<td>&nbsp;</td>

<!-- TMPL_LOOP TAGESZAHLEN -->
<td><!-- TMPL_VAR TAGESZAHL --></td>
<!-- /TMPL_LOOP TAGESZAHLEN -->

</tr>

<tr>
<td>&nbsp;</td>

<!-- TMPL_LOOP WOCHENTAGE -->
<td><!-- TMPL_VAR WOCHENTAG --></td>
<!-- /TMPL_LOOP WOCHENTAGE -->

</tr>

<!-- TMPL_LOOP ALLE_TEAMZEILEN -->

<tr>

<td><!-- TMPL_VAR TEAMBEZEICHNUNG --></td>

<!-- TMPL_LOOP DATEN_EINES_TEAMS -->
<td><!-- TMPL_VAR WERT_DES_TEAMS --></td>
<!-- /TMPL_LOOP DATEN_EINES_TEAMS -->

</tr>

<!-- /TMPL_LOOP ALLE_TEAMZEILEN -->

</table>


... sollte dann i.e. sowas rauskommen
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<table>

<tr>
<td>&nbsp;</td>
<td>1.Juli</td>
<td>2.Juli</td>
<td>3.Juli</td>
<td>usw ...</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>So</td>
<td>Mo</td>
<td>Di</td>
<td>&nbsp;</td>
</tr>


<tr>
<td>Team 1</td>

<td>12</td>
<td>23</td>
<td>55</td>
<td>&nbsp;</td>

</tr>
<tr>
<td>Team 2</td>

<td>14</td>
<td>3</td>
<td>86</td>
<td>&nbsp;</td>

</tr>
<tr>
<td>Team 3</td>

<td>5</td>
<td>41</td>
<td>74</td>
<td>&nbsp;</td>

</tr>
<tr>
<td>Team 4</td>

<td>9</td>
<td>58</td>
<td>2</td>
<td>&nbsp;</td>

</tr>
<tr>
<td>Team 5</td>

<td>22</td>
<td>0</td>
<td>3</td>
<td>&nbsp;</td>

</tr>
<tr>
<td>usw...</td>

<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>

</tr>

<!-- /TMPL_LOOP JE_TEAM_EINE_ZEILE -->

</table>
renee
 2007-07-05 23:39
#278 #278
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Für die Zellenformatierung kannst Du ja mit den "Spezialvariablen" arbeiten oder mit anderen HTC-Konstrukten (SWITCH, IF oder einfach ein VAR)...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
MartinR
 2007-07-05 23:57
#279 #279
User since
2004-06-17
305 Artikel
BenutzerIn
[default_avatar]
... das habe ich dann so gelöst. Hab es oben nur aus Gründen der Übersichtlichkeit rausgelassen.
Code: (dl )
1
2
3
4
...
<td class="<!-- TMPL_VAR CSS_STYLE -->"><!-- TMPL_VAR WERT_DES_TEAMS -->
...
</td>
<< >> 6 Einträge, 1 Seite



View all threads created 2007-07-05 13:25.