Wolfgang Wiese: CGI.pm

Beitrag lesen

Hi,

nachdem ich letztens mit der Nase auf die Existenz der CGI.pm hingewiesen wurde, möchte ich sie dann auch nutzen. Hab' da ein winziges Problem. Folgende Situation:

Lass mich raten: DU warst in einer de.*.*.cgi-Newsgroup
in der man auf jede Frage nur die Antwort bekommt, das CGI.pm
das Allheilmittel sei, alles koenne, alles ermoegliche und das ohne
es die Welt aufhoert zu drehen? :)

print table({-align=>center});

»»         for(my $i=0;$i<10;$i++) {
»»              print Tr(td( hier steht der Inhalt)));
»»         }

print "</table>";

Gibt es 'ne elegantere Art, so einen Konstrukt auszugeben?

Oh ja!
Denk daran, das du das Skript vielleicht heute sehr kennst, es aber bestimmt laenger
in Benutzung sein soll. In nem halben Jahr oder so aenderst
du aber das Design der HP und musst somit auch
wieder den Code des CGI's aendern. =>Du musst also erstmal
checken, was der ganze Code macht etc pp..
Nicht sehr schoen.
Loesung: Mach alle HTML-Ausgaben mit Hilfe von Layoutdateien.

Kann z.B. so aussehen:
---
<html><head><title>Meine Ausgabe</title></head>
<body>
<h2>Meine Ausgabe</h2>
Vielen Dank fuer Ihre Daten.<br>
Sie gaben ein: #OUTPUT#
</body></html>
---

In deinem CGI-Programm liest du diese Layoutdatei einfach ein,
ersetzt dann mit ner reg. Exp. die Variable #OUTPUT#
durch die dynamischen Werte und gibst dann das
ganze aus.
(Z.B.:
  foreach $key (keys %ENV) {
    $formdata .= "<b>$key</b>: $ENV{$key}<br>\n";
  }
  open(f1,"layout.html") CgiDie("Blafasel");
   @LAYOUT = <f1>;
  close f1;
  print "Content-Type: text/html\n\n";
  for ($i=0; $i<=$#LAYOUT; $i++) {
    $LAYOUT[$i] =~ s/#OUTPUT#/$formdata/gi;
    print $LAYOUT[$i];
  }
)
Vorteil: wenn du in nem jahr wieder an die Sache rangehst brauchst du nicht
mehr das CGI aendern, sondern nur noch die
Layoutdatei. Und das koennte dann auch jemand anders machen,
der keine Ahnung von Programmierung hat.

Ciao,
  Wolfgang