<!--#include virtual="xxx"--> in Perl?!
Marcel Miller
- perl
Hallo,
auf meiner Seite binde ich das Menü zentral aus einer Datei in jede der .shtml Seiten mit dem Befehl <!--#include virtual="xxx.html"--> ein. Gibt es eine Möglichkeit dies auch mit einer von Perl erzeugten Seite zu machen?
Ich hoffe Ihr versteht was ich meine.
mfg Marcel
Hallo Marcel,
auf meiner Seite binde ich das Menü zentral aus einer Datei in jede der .shtml Seiten mit dem Befehl <!--#include virtual="xxx.html"--> ein. Gibt es eine Möglichkeit dies auch mit einer von Perl erzeugten Seite zu machen?
die nahe liegenste Lösung ist auch die Richtige:
<!--#include virtual="/cgi-bin/menue.pl"-->
Du musst aber darauf achten, daß das Script nicht noch einen Header wie etwa "Content-type: text/html\n\n" mit ausgibt, sondern nur den Quellcode welchen du an dieser Stelle in deiner Datei haben möchtest.
Grüße,
Peter
Hallo Peter,
die nahe liegenste Lösung ist auch die Richtige:
<!--#include virtual="/cgi-bin/menue.pl"-->Du musst aber darauf achten, daß das Script nicht noch einen Header wie etwa "Content-type: text/html\n\n" mit ausgibt, sondern nur den Quellcode welchen du an dieser Stelle in deiner Datei haben möchtest.
Ich habe mich anscheinend doch missverständlich ausgedrückt, ich möchte eine Menü, das in einer externen Datei seitenübergreifend gespeichert ist, in eine von einer *.pl oder *.cgi datei erzeugten Internetseite einfügen. Bei 'normalen' Internetseiten ist das je kein Problem, da ändere ich die endung in *.shtml und schon kann ich das menü mit dem befehl <!--#include virtual... in meine Seite einbinden. Aber wie ist das bei dynamisch erzeugten Seiten??
Anbei ein beispiel um mein Problem zu verdeutlichen. Ein Script weiterleitung.cgi, das dynamisch eine Seite erzeugt in die ich das menü aus der externen datei einbinden kann:
print <<__REQUEST__;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!--#include virtual="navigation_oben.html"--> (das funktioniert natürlich nicht)
<CENTER>
<B>Schlage diese Seite einem Freund vor.<br>(<A HREF="$ENV{'HTTP_REFERER'}">$ENV{'HTTP_REFERER'}</A>)</B><P>
Wenn du einem Freund diese Seite empfehlen möchtest,
oder wenn du dir einfach selbst eine Erinnerung schicken möchtest, ist das der einfachste Weg......
ich hoffe es gibt einen weg, ansonsten muss ich jedesmal wenn sich was am menü ändert, bei zig perlscripten die selbe anpassung vornehmen.
mfg Marcel
Hallo Marcel,
Ich habe mich anscheinend doch missverständlich ausgedrückt, ich möchte eine Menü, das in einer externen Datei seitenübergreifend gespeichert ist, in eine von einer *.pl oder *.cgi datei erzeugten Internetseite einfügen. Bei 'normalen' Internetseiten ist das je kein Problem, da ändere ich die endung in *.shtml und schon kann ich das menü mit dem befehl <!--#include virtual... in meine Seite einbinden. Aber wie ist das bei dynamisch erzeugten Seiten??
das einfachste ist sicherlich an der passenden Stelle die externe Datei aus dem Script heraus auszulesen und auf die Standartausgabe zu schreiben:
sub insert_file {
my $name = shift;
open(FILE, "<$name") || die "Error: $!\n";
while (<FILE>) {
print;
}
close(FILE);
}
Eine andere Möglichkeit wäre es einen kleinen Parser zu schreiben, der aus deinen Quellcode die SSI Include Anweisungen extrahiert und mit dem Inhalt der SSI Dateien ersetzt. Aber das erinnert doch ein bißchen an die Geschichte von den Kanonen und Spatzen ...
Grüße,
Peter
Hallo Peter,
das einfachste ist sicherlich an der passenden Stelle die externe Datei aus dem Script heraus auszulesen und auf die Standartausgabe zu schreiben:
sub insert_file {
my $name = shift;
open(FILE, "<$name") || die "Error: $!\n";
while (<FILE>) {
print;
}
close(FILE);
}
Das hört sich gut an. Danke für deine Antwort.
Leider kann ich kein Perl programieren. Bestehende Scipts anpassen ja, aber programmieren nein.
Desshalb jetzt meine frage, reicht das, wenn ich den folgenden Schnipsel
sub insert_file {
my $name = shift;
open(FILE, "<$name") || die "Error: $!\n";
while (<FILE>) {
print;
}
close(FILE);
}
an die entsprechende Stelle ins Perlscript kopiere? und wo muss ich dann den Pfad zu der Datei hinschreiben, in dem das einzufügende liegt?
mfg Marcel
Hallo Marcel,
Leider kann ich kein Perl programieren. Bestehende Scipts anpassen ja, aber programmieren nein.
Desshalb jetzt meine frage, reicht das, wenn ich den folgenden Schnipselsub insert_file {
my $name = shift;
open(FILE, "<$name") || die "Error: $!\n";
while (<FILE>) {
print;
}
close(FILE);
}an die entsprechende Stelle ins Perlscript kopiere? und wo muss ich dann den Pfad zu der Datei hinschreiben, in dem das einzufügende liegt?
du must die Funktion von oben irgendwo in dein Script hinkopieren und kannst sie dann mit
insert_file("pfad/zu/deiner/datei");
benutzen.
Um nochmal auf dein Beispiel zurück zu kommen:
print <<__REQUEST__;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
EOREQUEST
insert_file("navigation_oben.html");
print <<__REQUEST__;
<CENTER>
<B>Schlage diese Seite einem Freund vor.<br>(<A HREF="$ENV{'HTTP_REFERER'}">$ENV{'HTTP_REFERER'}</A>)</B><P>
Wenn du einem Freund diese Seite empfehlen möchtest,
oder wenn du dir einfach selbst eine Erinnerung schicken möchtest, ist das der einfachste Weg......
Grüße,
Peter
p.s.: PERL ist nicht schwer zu lernen - und es lohnt sich.
Hi Peter
p.s.: PERL ist nicht schwer zu lernen
Ich überleg schon lange ob ich das nicht lernen soll, ein buch hab ich mir schon drüber gekauft *g*.
und es lohnt sich.
Das auf jeden Fall.
Danke für deine Hilfe, ich habs gerade probiert, es funktioniert ohne Probleme.
mfg Marcel