Schrift
[thread]890[/thread]

Arrays + Hashes mit HTML::TEMPLATE: wie vom HTML ins CGI?



<< >> 6 Einträge, 1 Seite
vaan
 2007-02-12 13:36
#9624 #9624
User since
2006-11-21
17 Artikel
BenutzerIn
[default_avatar]
Hi Leute ich bin's mal wieder ;o)

und es dreht sich gerade wieder um das HTML::TEMPLATE.
Also ich hab mir da folgendes CGI zusammengebaut:

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
#!C:/Perl/bin/perl.exe
use strict;
use HTML::Template;
use CGI;

my $cgi = new CGI;
my $the_file = $cgi->param('param1');


my @reportdata = ();
my $id=0;
my $template = HTML::Template->new(filename => '..\\htdocs\\dropui\\showfile.tmpl');

if (open(THE_FILE, "$the_file"))
{

while (<THE_FILE>)
{
my %row_data; # get a fresh hash for the row data
my %test_row;

# fill in this row


@fields = split(/\*\*/,$_);

if ($id == 0){
$test_row{FID} = $id++;
$test_row{FTYPE} = shift @fields;
$test_row{FHEADER} = shift @fields;
$test_row{FLINK} = shift @fields;
$test_row{FSYSTEM} = shift @fields;
$test_row{FBLA} = shift @fields;
}

else{
$row_data{ID} = $id++;
$row_data{TYPE} = shift @fields;
$row_data{HEADER} = shift @fields;
$row_data{LINK} = shift @fields;
$row_data{SYSTEM} = shift @fields;
$row_data{BLA} = shift @fields;
}

push(@reportdata, \%row_data, \%test_row);


}
close(THE_FILE);

}

# finally, assign the loop data to the loop param, again with a
# reference:
$template->param(THIS_LOOP => \@reportdata);

# send the obligatory Content-Type
print "Content-Type: text/html\n\n";

# print the template
print $template->output;

exit(0);


Dieses CGI liest die Datei unter "$the_file" aus und baut dann einen Hash und später ein Array, welches den Aufbau der späteren HTML Tabelle hat, im HTML Template geb ich das wiefolgt aus:

Quote
<TABLE BORDER=1 width="100%">


<TMPL_LOOP NAME="THIS_LOOP">



<tr>
<TD><b><TMPL_VAR NAME="FID"></b></TD>
<TD><b><TMPL_VAR NAME="FTYPE"></b></TD>
<TD><b><TMPL_VAR NAME="FHEADER"></b></TD>
<TD><b><TMPL_VAR NAME="FLINK"></b></TD>
<TD><b><TMPL_VAR NAME="FSYSTEM"></b></TD>
<TD><b><TMPL_VAR NAME="FBLA"></b></TD>

</tr>



<tr>
<TD><TMPL_VAR NAME="ID"></TD>
<TD><TMPL_VAR NAME="TYPE"></TD>
<TD><TMPL_VAR NAME="HEADER"></TD>
<TD><TMPL_VAR NAME="LINK"></TD>
<TD><TMPL_VAR NAME="SYSTEM"></TD>
<TD><TMPL_VAR NAME="BLA"></TD>

</tr>


</TMPL_LOOP>

</TABLE>


Das Anzeigen funzt, wie mach ich das jetzt wenn ich die Ganzen Daten perl link wieder an ein CGI schicken will? Also den kompletten inhalt der Variable "THIS_LOOP"?

Ich dachte jetzt eigentlich, dass ich diese Variable wie einen Scalar nutzen kann und dann z.B. sowas möglich wäre:

Code: (dl )
1
2
3
4
5
6
<td>
<a href="\cgi-bin\editfile.cgi?param=<TMPL_VAR NAME="THIS_LOOP">">
<img src="../dropui/images/icons/edit.gif" alt="" border="0">
edit config file
</a>
</td>


Kann mir da jemand helfen? Das wär Weltklasse!
pq
 2007-02-12 13:41
#9625 #9625
User since
2003-08-04
12209 Artikel
Admin1
[Homepage]
user image
per CGI kann man strings versenden, und nicht mehr. wenn du irgendwelche
"daten" versenden willst, musst du sie irgendwie serialisieren.
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
pktm
 2007-02-12 13:44
#9626 #9626
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Du musst die Werte vin THIS_LOOP wieder durchlaufen. Nur (und ausschließlich) so kommst du an die Werte.
Das müsste in etwa so gehen (ungestestet):
Code: (dl )
1
2
3
4
5
6
<a href="\cgi-bin\editfile.cgi?<TMPL_LOOP NAME="THIS_LOOP">
fid=<TMPL_VAR NAME="FID">;ftype=<TMPL_VAR NAME="FTYPE">...
</TMPL_LOOP>">
<img src="../dropui/images/icons/edit.gif" alt="" border="0">
edit config file
</a>


Allerdings hast du dann die Probleme, dass
a) der Query-String mit dieser Methode eine begrenzte Länge besitzt und du da Gefahr läufts unerklärliche Fehler zu erhelten, weil einfach nicht alle Daten gesendet weren (oder auch gar nicht) und
b) du ja gleiche Parameternamen für mehrere Dinge hast. Da müsstest du dann komplizierte Umwege machen die alle ganz scheußlich sind.

Tu dir selbst einen Gefallen und nimm eine Session ;)

Grüße, pktm
http://www.intergastro-service.de (mein erstes CMS :) )
vaan
 2007-02-12 14:15
#9627 #9627
User since
2006-11-21
17 Artikel
BenutzerIn
[default_avatar]
Danke für die schnelle Antwort erst mal.
Und wie soll ich das dann mit der Session machen?
pktm
 2007-02-12 16:16
#9628 #9628
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hier findest du das entsprechende Modul, und ganz unten am ENde der Manpage findest du den Link zum Tutorial, wo recht gut erklärt wird, wie man Sessions so benutzen kann.
Ich meine, wir haben auch was im Wiki dazu stehen.

Grüße, pktm
http://www.intergastro-service.de (mein erstes CMS :) )
pq
 2007-02-12 17:42
#9629 #9629
User since
2003-08-04
12209 Artikel
Admin1
[Homepage]
user image
[quote=pktm,12.02.2007, 12:44]
Code: (dl )
1
2
3
4
5
6
<a href="\cgi-bin\editfile.cgi?<TMPL_LOOP NAME="THIS_LOOP">
fid=<TMPL_VAR NAME="FID">;ftype=<TMPL_VAR NAME="FTYPE">...
</TMPL_LOOP>">
             <img src="../dropui/images/icons/edit.gif" alt="" border="0">
             edit config file
             </a>
[/quote]
URI::Escape hast du hier auch vergessen (ESCAPE=URL)
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
<< >> 6 Einträge, 1 Seite



View all threads created 2007-02-12 13:36.