Menu
 

 

SSI - Frames nachladen

von Arne Pottharst

Nicht aus dem Rahmen zu fallen ist manchmal ganz angebracht. Da ist es gut, dass SSI-technisch nachgeholfen werden kann, wenn mal wieder eine Seite die Rahmenbedingungen nicht eingehalten hat und aus dem Frame gefallen ist. Es geht eben auch ganz ohne wackeliges Javascript.

Wenn eine Unterseite des Framesets einzeln aufgerufen wird, besteht das Problem, dass das Frameset außenherum fehlt, Navigation und ähnliches sind nicht vorhanden. Da ist es ganz nützlich, wenn es einen Mechanismus gibt, der das dazugehörige Frameset nachläd.

Schritt 1: Bestimmte Seite in Frameset laden
Die erste Teil der Aufgabe besteht darin, eine bestimmte Seite (statt der Standard-Startseite) in das Frameset zu laden, dieser Teil ist ziemlich einfach: es wird das Frameset mit der Datei, die geladen werden soll, als Parameter, aufgerufen:

index.html?inhalt3.html

Die Index-Datei enthält eine Abfrage, ob der übergebene Parameter, der in der Variable QUERY_STRING gespeichert wird, leer ist oder einen Wert enthält. Sollte er leer sein, wird die Standard-Startseite aufgerufen, anderenfalls die übergebene Seite.

<frameset cols="150,*">
  <frame src="menu.shtml?">
  <!--#if expr="$QUERY_STRING = ''" -->
    <frame name="inhalt" src="inhalt1.shtml">
  <!--#else -->
    <frame name="inhalt"
      src="<!--#echo var="QUERY_STRING" -->">
  <!--#endif -->
</frameset>

Schritt 2: Frameset nachladen
Im zweiten Schritt stellen wir fest, ob eine aufgerufene Seite sich im Frameset befindet oder nicht. Dazu wird bei jedem Aufruf einer Seite aus dem Frameset ein Wert als Parameter übergeben. Ist dieser vorhanden, wurde die Seite vom Frameset aufgerufen, andernfalls muss das Frameset nachgeladen werden.

Als übergebener Wert eignet sich eigentlich alles. Am besten ist es, einen eindeutigen Wert zu wählen, da zum Beispiel bei Suchmaschinen dieser Parameter mitgespeichert werden könnte und so das Frameset nicht nachgeladen würde. In diesem Beispiel wurde die IP-Adresse des Surfers gewählt (REMOTE_ADDR), da diese recht eindeutig ist und sich sicherlich von der Adresse der Suchmaschine unterscheidet.

Wenn also eine Seite innerhalb des Framesets aufgerufen wird, wird folgender Link verwendet:

<a target="inhalt" href="inhalt1.shtml?<!--#echo var="REMOTE_ADDR" -->">Menupunkt 1</a>

In jeder Datei muss sich eine Abfrage befinden, damit festgestellt werden kann, ob der übergebene Parameter mit der aktuellen IP-Adresse übereinstimmt. Ist das nicht der Fall, wird per META-REFRESH das Frameset geladen und die aktuelle Seite - wie in Schritt 1 beschrieben - aufgerufen.

Der Test wird per if Abfrage vorgenommen, übergeben wird der DOCUMENT_NAME, eine Variable, die den Namen der aktuellen Seite speichert. Dadurch kann der Code universell verwendet werden und muss nicht an jede Seite angepasst werden.

Das Ergebnis
Zusammengesetzt sieht es dann in etwa so aus:

<!--#if expr="$QUERY_STRING != $REMOTE_ADDR" -->
<html>
<head>
<meta http-equiv="refresh" content="0;
  URL=index.shtml?<!--#echo var="DOCUMENT_NAME" -->">
</head>
<body>
<a href="index.shtml?<!--#echo var="DOCUMENT_NAME" -->">
  Lade Frameset...</a>
</body>
</html>
<!--#else -->
<html>
<body>
Seiteninhalt
</body>
</html>
<!--#endif -->

Natürlich muss auch die Index-Datei mit dem Frameset angepasst werden, damit jeweils die IP-Adresse übergeben wird und nicht rekursiv "Frame in Frame" geladen wird.

<frameset cols="150,*">
  <frame src="menu.shtml?<!--#echo var="REMOTE_ADDR" -->">
  <!--#if expr="$QUERY_STRING = ''" -->
    <frame name="inhalt"
      src="inhalt1.shtml?<!--#echo var="REMOTE_ADDR" -->">
  <!--#else -->
    <frame name="inhalt"
      src="<!--#echo var="QUERY_STRING" -->?<!--#echo
      var="REMOTE_ADDR" -->">
  <!--#endif -->
</frameset>

Live-Demos & Download

index.shtml | menu.shtml | inhalt1.shtml | inhalt2.shtml | inhalt3.shtml | inhalt4.shtml | Download (ZIP-Datei - 2,3 KB)

 

 
   Anzeigen


Navigation:    Webdesign - Programmierung - Web Grafiken - Software Guides - Tools - Templates - Schriftarten - Seminare - IT News
Partner:   Template OK - PCopen - SITEopen - PCopen Schweiz - HTMLopen Schweiz - VirtualUniversity.ch - WEB-SET.com - YesMMS - Job und Karriere