Startseite --> Hilfen & Technische Artikel --> Mehrere Dateien mit Perl in Frameset laden
Einleitung
Die Lösung
Bemerkungen
In meinem SELFHTML-Feature-Artikel "Datei mit PHP in Frameset laden" gehe ich auf ein bekanntes Problem der Frames ein: Man kann keine Unterseiten des Framesets ansteuern. Man kann aber mit Hilfe serverseitiger Skripte entsprechende Lösungen entwickeln.
In diesem Feature-Artikel findet man auch als kleines Bonbon für Perl-Liebhaber auch eine entsprechende Lösung in Perl. Ich habe allerdings nur gezeigt, wie das erste Beispiel in Perl aussieht. In diesem kleinen Artikel möchte ich die Perl-Entsprechung für das zweite Beispiel vorstellen.
Der Einfachheit halber verwende ich wieder das Frameset aus der altbekannten Geschichte Zwei Frames gleichzeitig ändern:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"> <html> <head> <title>Zwei Frames gleichzeitig ändern</title> </head> <frameset cols="180,*"> <frame src="zweiframes_links.htm" name="links"> <frameset rows="180,*"> <frame src="zweiframes_to.htm" name="oben"> <frame src="zweiframes_tu.htm" name="unten"> </frameset> </frameset> </html>
Unser Ziel ist es, die beiden linken Frames, die die Namen oben und unten tragen, durch ein Server Side Include zu ersetzen. Natürlich muss die Datei auch von index.htm zu index.shtml umbenannt werden, damit Server Side Includes überhaupt ausgeführt werden. Die auf diese Weise veränderte Datei kann nun folgendermaßen aussehen:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"> <html> <head> <title>Zwei Frames gleichzeitig ändern</title> </head> <frameset cols="180,*"> <frame src="zweiframes_links.htm" name="links"> <frameset rows="180,*"> <!--#exec cgi="/cgi-bin/zweidynaframe.pl" --> </frameset> </frameset> </html>
Die Definitionen für die beiden Frames oben und unten wurden nun durch Zeile <!--#exec cgi="/cgi-bin/zweidynaframe.pl" --> ersetzt. Diese ruft das Perl-Skript zweidynaframe.pl auf, das zum Beispiel so aussehen kann:
#!/usr/bin/perl -w
use strict;
# CGI-Modul einbinden
use CGI;
my $cgi = new CGI;
# Parameter auslesen
my $oben = $cgi->param('oben');
my $unten = $cgi->param('unten');
# Daten auswerten
$oben = "zweiframes_to.htm" if($oben eq "");
$unten = "zweiframes_tu.htm" if($unten eq "");
# Frameset schreiben
print "Content-type: text/html\n\n";
print "<frame src=\"$oben\" name=\"oben\">\n";
print " <frame src=\"$unten\" name=\"unten\">";
Das Skript ruft zunächst das CGI-Modul auf, um leichter an die Parameter zu kommen. Anschließend kopiert es die Parameter in die Variablen $oben und $unten. Dann prüft es, ob diese Variablen nicht zufällig leer oder nicht vorhanden sind und schreibt ggf. die Standard-Dateien für die Frames in diese Variablen. Und zu guter letzt legt es die beiden Frames an. Das Skript gibt, bevor es den zweiten Frame anlegt, noch ein paar Leerzeichen aus. Diese haben den Zweck, dass der fertige HTML-Code am Ende ordentlich ist.
Und so kann das alles dann am Ende aussehen:
Die hier vorgestellte Lösung ist nicht die Lösung. Jedes Frameset ist anders, deswegen gibt es für jedes Frameset unterschiedliche Möglichkeiten, Deeplinks zu setzen. Mein Feature-Artikel und diese Erweiterung stellen jeweils nur eine Art Grundlage vor, von der man sich inspirieren lassen kann.
Startseite --> Hilfen & Technische Artikel --> Mehrere Dateien mit Perl in Frameset laden