HTML Datei dynamisch mit -print... - erzeugen
kaepten
- perl
Wie habt Ihr das "Problem" gelöst, wenn ihr eine HTML Seite in Perl dynamisch ausgeben wollt?
Ausgangslage:
Ich habe eine HTML codierte Seite mit x-beliebigen Tags.
Problem:
Ich will genau diese Seite via Perl (print - Befehl) (quasi-)dynamisch erzeugen.
Vorgehen:
Vor jede Zeile HTML-code und am Ende der Zeile
print "... bzw ...\n"; setzen.
Allen Gänsefüsschen \ voransetzen (und was noch?)
Ich habe das mehrmals mühsam von Hand gemacht, hat jemand einen Tipp, wie man das ein wenig "automatisieren" könnte??
Wie habt Ihr das "Problem" gelöst, wenn ihr eine HTML Seite in Perl dynamisch ausgeben wollt?
Ausgangslage:
Ich habe eine HTML codierte Seite mit x-beliebigen Tags.Problem:
Ich will genau diese Seite via Perl (print - Befehl) (quasi-)dynamisch erzeugen.Vorgehen:
Vor jede Zeile HTML-code und am Ende der Zeile
print "... bzw ...\n"; setzen.
Allen Gänsefüsschen \ voransetzen (und was noch?)Ich habe das mehrmals mühsam von Hand gemacht, hat jemand einen Tipp, wie man das ein wenig "automatisieren" könnte??
Hi,
probiers doch mal mit (use CGI.pm):
print<<HTML;
....
Hier den ganz normalen HTML-Code, wenn es sein muß
sogar mit Perl-Variablen
....
HTML
Gruß Jörg
Hi!
print<<HTML;
Also zumindest die mir bekannten Perl-Versionen mögen das *so* nicht...
Entweder
print<<'HTML';
dann werden Sonderzeichen ($,",',...) nicht interprediert, also auch keine Variablen ausgegeben. (Ist bei print 'kostet viele $$$s'; genauso).
oder
print<<"HTML";
dann werden die Sonderzeichen wie gewohnt interprediert, müssen also ggf. mit "" gequoted werden.
Ciao,
Mirko
Hi!
Noch ein kleiner Nachtrag:
Das HTML (oder wie du die Ende-Kennzeichnung auch genannt hast) muß unbedingt am Anfang der Zeile stehen (also keine Einrückungen!) und darf auch keine Leerzeichen dahinter haben! Sonst interprediert Perl alles bis zum Dateiende als Text für den print.
Übrigens kann man das überall verwenden, wo Strings erlaubt sind, also auch z.B.
&meinefunktion(<<'ENDE','blabla');
Dieser Text wird
an die Funktion
&meinefunktion()
übergeben
ENDE
Ciao,
Mirko
Hi!
Auch hi,
Noch ein kleiner Nachtrag:
Das HTML (oder wie du die Ende-Kennzeichnung auch genannt hast) muß unbedingt am Anfang der Zeile stehen (also keine Einrückungen!) und darf auch keine Leerzeichen dahinter haben! Sonst interprediert Perl alles bis zum Dateiende als Text für den print.
Stimmt.
Übrigens kann man das überall verwenden, wo Strings erlaubt sind, also auch z.B.
&meinefunktion(<<'ENDE','blabla');
Dieser Text wird
an die Funktion
&meinefunktion()
übergeben
ENDECiao,
Mirko
Ich verwende Perl 5.005_02 auf SuSE 6.0 und da läuft folgendes wie Sau:
----------snip---------------
#!/usr/bin/perl -w
use CGI qw(:standard);
use CGI::Carp qw(fatalsToBrowser);
use lib '.';
use MO qw(:STANDARD);
use MO qw(:VARIABLES);
############
############
############
#Labels und sonstige Bezeichnungen
@labels = ("Zurück", "Stammdatenübersicht", "Hilfe", "Kundenstammdaten","Hotelstammdaten", "Reisestammdaten","Mitarbeiter", "...");
$session = param('session');
$port = param('port');
print header;
print_html();
print end_html;
exit(0);
############
#Anzeigen der Stammdatenübersicht
############
sub print_html
{
print <<KOPF;
<HEAD>
<meta http-equiv="expires" content="0">
<TITLE>Stammdatenübersicht</TITLE>
</HEAD>
<BODY bgcolor="#c0c0c0">
<TABLE border="0" cellspacing="1" cellpadding="1" style="FONT-SIZE: x-small">
<TD width="10%"><A href="/cgi-bin/mo/log.cgi?port=$port&session=$session">$labels[0]</A>
<TD width="100">$labels[1]
<TD width="85%" align="right"><A href="/mo/help/MO_Übersicht.html#stammdaten" target="_blank">$labels[2]</A>
</TABLE> <HR>
Bitte gewünschte Funktion durch Mausklick auswählen: <p>
<table width="100%" style="FONT-SIZE: x-small" border rules=cols frame=void>
<tr>
<td width="20%"><b>$labels[3]</b>
<td width="20%"><b>$labels[4]</b>
<td width="20%"><b>$labels[5]</b>
<td width="20%"><b>$labels[6]</b>
<td width="20%"><b>$labels[7]</b>
<td width="20%">
<tr>
<td><A href="/cgi-bin/mo/s_kd.cgi?port=$port&session=$session&maske=2">Kunden-Verwaltung</a>
<td><A href="/cgi-bin/mo/s_ho.cgi?port=$port&session=$session&maske=2">Hotel-Verwaltung</a>
<td>
<td>Mitarbeiterverwaltung
<td>
<tr>
<td><hr>
<td><hr>
<td><hr>
<td><hr>
<td><hr>
<td><hr>
<tr>
<td><A href="/cgi-bin/mo/stamm_abholstellen.cgi?port=$port&session=$session">Abholstellen-Verwaltung</A>
<td><A href="/cgi-bin/mo/stamm_kategorie.cgi?port=$port&session=$session">Kategien-Verwaltung</A>
<td>
<td><A href="/cgi-bin/mo/stamm_taetigkeit.cgi?port=
.....
<td>
</table>
KOPF
} #end sub print_html
---------snap------------
Gruß Jörg
Ich verwende Perl 5.005_02 auf SuSE 6.0 und da läuft folgendes wie Sau:
----------snip---------------
....
print <<KOPF;
....
Ach so ist das... ich mache bei Operatoren meistens Leerzeichen dazwischen, wenn der Platz reicht...
print << KOPF; geht nicht (da wird offensichtlich das Leerzeichen mitgezählt), während print << "KOPF"; keine Probleme macht.
Ciao,
Mirko
Vorgehen:
Vor jede Zeile HTML-code und am Ende der Zeile
print "... bzw ...\n"; setzen.
Allen Gänsefüsschen \ voransetzen (und was noch?)
Ich habe das mehrmals mühsam von Hand gemacht, hat jemand einen Tipp, wie man das ein wenig "automatisieren" könnte??
Was soll das dann bringen?
Wenn Du einen statischen Datei-Inhalt ausgeben willst, kannst Du einfach die Datei hochladen, mit open () öffnen und ihren Inhalt ausgeben.
Aber der Sinn der Sache ist doch normalerweise, daß der Inhalt *dynamisch* berechnet wird, d. h. durch entsprechende Algorithmen in Abhängigkeit von entsprechenden Daten.
Was man natürlich tun sollte, ist, Standardroutinen aufzubauen.
Ich habe beispielsweise für die <head>-Section eine Perl-Prozedur mit mehreren Parametern (Titeltext, reload-Frequenz etc.) - der größte Teil der HEAD-Section wird innerhalb eines Projekts einheitlich aussehen. Für das Dokumentende habe ich auch eine solche Funktion; für einige andere Standardaufgaben (etwa in bestimmten Strings Leerzeichen durch zu ersetzen und Ähnliches) ebenfalls. Diesen Modul binde ich mit "use $local/html;" in jedes CGI-Skript ein.
Wahrscheinlich gibt es große Teile dieser Funktionen auch in Perl-Standard-Modulen - aber ich bin meine eigenen Routinen gewöhnt und weiß, wovon ich mich abhängig mache.