sonnenblen.de - Das unabhängige Sun User Forum

Software => Programmieren, Kompilieren => Thema gestartet von: franco am 14. Mai 2007, 12:59:04

Titel: Perl Befehle innerhalb einer CGI-Funktion benutzen
Beitrag von: franco am 14. Mai 2007, 12:59:04
Hallo SUN-Freunde,

ich habe z.Z. ein Problem mit einem CGI-Script.
Ich benutze den s.g function-oriented style und möchte innerhalb einer cgi-Funktion aus cgi.pm eine normale foreach Schleife einbauen bzw. normale Perl-Befehle.

Etwa so:

print header("text/html"),
      start_html(...);

print table({-align=>'center}, foreach my $element(@$liste) {
                                                    Tr(),
                                                    foreach my $feld (@$element) {
                                                           td($feld),
                                                    }
                                                }
        ); # end table
       
usw...

print end_html;

Das geht so natürlich nicht, aber wie macht man's? Kennt sich jemand damit evt. aus?

Danke, Gruss aus LE
Frank
Titel: Re: Perl Befehle innerhalb einer CGI-Funktion benutzen
Beitrag von: claus am 14. Mai 2007, 18:21:12
Hallo,

das Problem kommt mir bekannt vor.

Ich mach das einfach so:

my $cgi = new CGI;

print $cgi->header(-type =>'text/html',
-status => '200 ok',
-expires=> '+3d',
-charset=> 'ISO-8859-1');

&create_html_head_part();

&Parse_dir($start_dir);

&create_file_output (%file_hash);

&create_html_end_part;


in den Subroutinen kommt dann so etwas:


sub create_file_output
{
[...]
print "\t\t\t\t<p>\n";
foreach my $entry (@sorted_list)
{
next unless ($entry =~ /\.html$/);
#print $arg{$entry}."\n";
print  "\t\t\t\t\t<a class=\"nav\" href=\"$path"."/$entry\">$path/$entry [$arg{$entry} bytes]</a><br />\n";
}
print "\t\t\t\t</p>\n";
}

sieht zwar scheusslich aus, aber der generierte HTML code ist sauber und es funktioniert.

Keine Ahnung, wie man das wirklich richtig macht.

Claus
Titel: Re: Perl Befehle innerhalb einer CGI-Funktion benutzen
Beitrag von: Sonnenbrand am 14. Mai 2007, 21:06:55
Hallo Frank,


Das geht so natürlich nicht, aber wie macht man's? Kennt sich jemand damit evt. aus?

Danke, Gruss aus LE
Frank



auf die schnelle (weil meine Beispiele sind im Büro...):

Tr() und td() kannst du auch Arrays übergeben. Also z.B. so:

my @header= [ "A", "B", "C" ];
my @data1= [ "a", "b", "c" ];

print $html->table(Tr(@header), td(@data));


Achtung - ungetestet, da aus dem Kopf...


Falls die Schleife sich nicht via Array direkt umgehen lässt dann nutze ich einfach ein temp. Array was ich dann in der Schleife mittels push "füttere". Nach der Schleife bekommt dann die Tr() bzw. td() Funktion das temp. Array.


Andi
Titel: Re: Perl Befehle innerhalb einer CGI-Funktion benutzen
Beitrag von: franco am 14. Mai 2007, 22:01:24
Danke erstmal fuer die Antworten, ich werde es morgen in der Firma testen!
Gruss Frank aus LE