Struppi: Tutorial zum benutzen des CGI-Moduls

Beitrag lesen

Es ist doch sehr praktisch, wenn man:
print CGI::table( @rows );
schreiben kann.

Ja und ich hab immer noch keinen wirklichen schimmer wie dat gehen soll.

Die Funktionen des Moduls können Parameter in vielfältiger Weise verarbeiten.

a.) Funktion(a, b, c, ...)
    Hier musst du Wissen in welcher Reihenfolge die Parameter nötig sind

b.) Funktion(-attribut_1=> 'wert', -attribut_2 => 'wert')
Für Formularfelder optimal, da diese keinen Inhalt haben (von der HTML Seite aus gesehen). Die HTML Tags die erzeugt werden haben dann das Attribut mit dem Wert in der Form:
<Funktion attribut_1="wert" attribut_2="wert">

c.) Funktion( %HASH_REF, @ARRAY_REF )
z.b. für Listen und Tabellen. Die Referenz auf den Hash erzeugt die Attribute, wie bei 2. und die Array Referenz erzeugt den Inhalt.

Die einfachste Form ist z.b. so:

use CGI;
my @rows;
foreach(qw/1 2 3 4 5 6/)
{
    push @rows, "Wert: $_";
}
print CGI::ul( CGI::li( @rows ) );

Willst du der Liste eine ID geben muss die Letzte Zeile geändert werden:
print CGI::ul( {-id => 'liste'}, CGI::li( @rows ) );

Oder ein Tabelle:

use CGI;
my @rows;
foreach(qw/1 2 3 4 5 6/)
{
    push @rows, CGI::td( [ "Wert:", $_ ] );
}
print CGI::table( CGI::Tr( @rows ) );

td() erwartet als Parameter eine Listenreferenz und erzeugt die Anzahl von Tabellenzellen. Tr() erzeugt die Reihen.

Wenn du jetzt z.b. eine Tabelle mit 2 verschiedenen Farben machen willst, muss du die Reihen schon in der schleife erzeugen:

use CGI;
my @rows;
my $class = 'odd';
foreach(qw/1 2 3 4 5 6/)
{
    push @rows, CGI::Tr( {-class => $class }, CGI::td( [ "Wert:", $_ ] ));
    $class = $class eq 'odd' ? 'even' : 'odd';
}
print CGI::table( @rows  );

Das Problem bzw. das etwas unverständliche ist, das table keine Referenz erwartet (es erzeugt sonst für jede Reihe eine Tabelle) sondern direkt eine Array.

Du kannst aber trotzdem der Tabelle noch Attribute zufügen:

print CGI::table( { -border => 1}, @rows  );

Das ganze ist nicht einfach, aber im grossen und ganzen durchschaubar. Manchmal muss man ein bisschen rumprobieren ob jetzt eine Referenz oder nicht benötigt wird. Aber alles in allem ist das erzeugen von HTML code auf die Art wesentlich angenehmer als diese direkt auszugeben.

usw.

Struppi.