Aufbau von HTML-Seite
Kurti
- perl
0 Encoder0 Beat0 Patrick Andrieu0 Kurti
0 Alexander (HH)0 Struppi
Hallo,
bisher baue ich die Seite auf mit
......
use CGI qw(header);
print header(-type=>'text/html; charset=ISO-8859-1');
print <<AAA;
<!DOCTYPE HTML .........>
<html>
<head>
....
AAA
if (...) {
print 'weiterer HTML-Code';
}
.....
Jetzt will ich das ganze zunächst in eine Variable schreiben und erst ausgeben, wenn komplett erstellt.
Dabei dachte ich an folgendes:
......
use CGI qw(header);
my $output = header(-type=>'text/html; charset=ISO-8859-1');
$output .=<<AAA;
<!DOCTYPE HTML .........>
<html>
<head>
....
AAA
if (...) {
$output .= 'weiterer HTML-Code'; #@Patrick: Wie Du siehst, bin ich lernfähig (.=)
}
.....
[/code]
Mein Problem: Nach Ausführung von $output = header(-type=>'text/html; charset=ISO-8859-1');
ist $output leer.
Meines Wissens gibt header das gewünschte gleich aus, aber es wird nicht zurückgegeben, um es in eine Variable zu schreiben.
Von daher ist das hier
print header(-type=>'text/html; charset=ISO-8859-1');
auch schon falsch gedacht. Die Ausgabe kommt hier von der Funktion header() selbst, aber nicht durch das print.
Hallo Encoder!
Meines Wissens gibt header das gewünschte gleich aus, aber es wird nicht zurückgegeben, um es in eine Variable zu schreiben.
Von daher ist das hierprint header(-type=>'text/html; charset=ISO-8859-1');
auch schon falsch gedacht. Die Ausgabe kommt hier von der Funktion header() selbst, aber nicht durch das print.
???
header() ist eine Methode des CGI-Moduls. Natürlich muss man den Rückgabewert »printen«. Und natürlich ließe er sich in eine Variable speichern:
my $content-header = header(-type=>'text/html; charset=ISO-8859-1');
print $content-header;
Viele Grüße aus Frankfurt/Main,
Patrick
Mein Problem: Nach Ausführung von $output = header(-type=>'text/html; charset=ISO-8859-1');
ist $output leer.
Wie prüfst du das?
Wohin gibst du $output aus?
use CGI qw(header);
my $output = header(-type=>'text/html; charset=ISO-8859-1');
print $output;
gibt den HTML Header ohne Body aus.
mfg Beat
Hallo Kurti!
my $output = header(-type=>'text/html; charset=ISO-8859-1');
$output .=<<AAA;
<!DOCTYPE HTML .........>
<html>
<head>
....
AAA
Nach einem Heredoc-Delimiter gewöhn Dir an im Code IMMER eine Leerzeile zu notieren: »If the terminating identifier is on the last line of the program, you must be sure there is a newline after it; otherwise, Perl will give the warning Can't find string terminator "END" anywhere before EOF....« (schon aus dem Grund).
Ich würde jedoch den Content-type Content-type sein lassen und es separat ausgeben. Den Rest dann in einer Variable speichern.
$output .= 'weiterer HTML-Code'; #@Patrick: Wie Du siehst, bin ich lernfähig (.=)
Sehr gut ;)
Mein Problem: Nach Ausführung von $output = header(-type=>'text/html; charset=ISO-8859-1');
ist $output leer.
In der Konsole funzt™ Dein Code (habe jetzt nicht die Zeit, eine CGI-Ausgabe zu machen).
Viele Grüße aus Frankfurt/Main,
Patrick
Hallo Patrick and Beat,
In der Konsole funzt™ Dein Code (habe jetzt nicht die Zeit, eine CGI-Ausgabe zu machen).
Bei mir auch, war ein Fehler in meiner Prüfroutine im Kopf!
Danke.
Kurti
Moin Moin!
Unhabhängig von deinem Problem überleg doch mal, Code und HTML zu trennen, z.B. mit dem Template Toolkit.
Alexander
bisher baue ich die Seite auf mit
[code lang=html]
......
use CGI qw(header);
print header(-type=>'text/html; charset=ISO-8859-1');
Warum verwendest du aus einer Datei, die mindestens 250 KB gross ist und sinnvolle und mächtige Funktionen für die HTML Ausgabe hat, nur eine einzige?
Das macht doch keinen Sinn. Schau doch mal in die Dokumentation des CGI Moduls was es alles kann.
<!DOCTYPE HTML .........>
<html>
<head>
z.b. genau diese Sachen baut dir das Modul schön zusammen (noch praktischer wird es, wenn du Tabellen oder Formulare ausgibst).
Wenn dein Skript größer wird, wirst du aber irgendwann auch ein Template Engine zu schätzen Wissen. Früher wurde oft HTML::Template empfohlen, mittlerweile hat sich das von Alexander empfohlende TT verbreitet, da es flexibler ist.
Struppi.