Thomas: Kontrolliertes Nachladen von Frames

Hallo,

ich benutzte ein Framesset mit drei Frames. Problem ist, wenn Besucher über Suchmaschinen auf meine Seite gelangen kommen sie meist ohne den wichtigen Menüframe.

Die Lösung des Problems steht schon auf der Internetseite von Dr.Web
http://drweb.de/programmierung/php_frames.shtml

Nur ich weiß leider nicht wie der Autor es meint die einzelnen PHP-Schripte einzufügen. Ich bin mir hierbei nicht im klaren, ob der erste PHP-Teil in die Inhaltseite muss, zu der ich mit dem Script den Frame nachlade.

Vielleicht kann mir hierzu jemand bitte ein Beispiel geben.

P.S: Bitte nicht auf die Lösung von SelfHTML hinweisen, die kenne ich. Ist leider nicht die richtige Lösung. Meine Lösung soll sein, dass hier eine Seite von sich aus selbstständig kontolliert ob der Frame geladen wurde oder ihn noch nachladen muss.

  1. Hallo, Thomas,

    ich benutzte ein Framesset mit drei Frames. Problem ist, wenn Besucher über Suchmaschinen auf meine Seite gelangen kommen sie meist ohne den wichtigen Menüframe.

    Biete einen Link an, über welchen das Frameset nachgeladen werden kann, und zwar mit dem aktuellen Dokument, siehe http://aktuell.de.selfhtml.org/artikel/phpasp/php-frames/index.htm. Lade zusätzlich automatisch per JavaScript das Frameset nach, ein Anfang wäre dazu etwas wie: if (!parent.[framename]) location.href="menu.php?<?php echo(urlencode($_SERVER['PHP_SELF'])); ?>";, siehe auch http://aktuell.de.selfhtml.org/artikel/javascript/dyn-frames/index.htm.

    Die Lösung des Problems steht schon auf der Internetseite von Dr.Web
    http://drweb.de/programmierung/php_frames.shtml

    Diese Lösung finde ich qualitativ schlecht (register_globals wird vorausgesetzt) und sehr unflexibel.
    Außerdem verschachtelt sich das Frameset, wenn keine Cookies gesetzt werden können -- eine absolut unpassende Lösung!

    Nur ich weiß leider nicht wie der Autor es meint die einzelnen PHP-Schripte einzufügen.

    »Damit das Frameset nachgeladen werden kann, muss jede Inhalts-Datei um folgendes Script erweitert werden: [...]« - das erste Script wird am Anfang *jedes* Unterdokuments, welches später im Frameset aufgerufen wird, eingebunden. Das kannst du aber sofort vergessen, lagere den Code besser in einer externen Datei aus und binde diese Datei mit der Funktion require http://de.php.net/manual/de/function.require.php ein.

    $DATEI = "content.php"; #Name der PHP-Datei, die das Script enthält
    Umständlich - arbeite mit PHP_SELF, siehe http://de.php.net/manual/de/language.variables.predefined.php.

    Den Query String solltest du aus $_SERVER['QUERY_STRING'] beziehen, Cookies aus $_COOKIE beziehen.

    »Die Datei mit dem Frameset muss ebenfalls modifiziert werden: [...]« - das dürfte selbsterklärend sein, stelle den Code an den Anfang.

    Noch einmal in lesbarem und aktualisiertem Code:

    Für das Frameset:
    <?php
    setcookie('Frameset', '1', time()+7200, '/');
    if (!isset($_COOKIE['FrameInhalt'])) {
     $FrameInhalt='standard_unterseite.php';
    } else {
     $FrameInhalt=$_COOKIE['FrameInhalt'];
    }
    ?>

    (ginge vielleicht: if (!$FrameInhalt=$_COOKIE['FrameInhalt']) $FrameInhalt='standard_unterseite.php'; ...? Keine Ahnung.)

    Für die Unterseite/den Include:
    <?php
    $datei=$_SERVER['PHP_SELF'];
    if (!empty($_SERVER['QUERY_STRING'])) $datei.='?'.$_SERVER['QUERY_STRING'];
    setcookie('FrameInhalt', $datei, time()+7200, '/');
    if (!isset($_COOKIE['Frameset']) or $_COOKIE['Frameset']!='1') {
     header('Location: http://.../frameset.php');
     exit;
    }
    ?>

    Ich bin mir hierbei nicht im klaren, ob der erste PHP-Teil in die Inhaltseite muss, ...

    Ja, wie es in der Beschreibung steht - in *jede* Unterseite, deshalb bietet sich include()/require() an.

    ... zu der ich mit dem Script den Frame nachlade.

    Den Teilsatz verstehe ich nicht.

    P.S: Bitte nicht auf die Lösung von SelfHTML hinweisen, die kenne ich.

    Doch, mache ich aber, weil diese Lösung(en) weitsichtiger sind.

    Ist leider nicht die richtige Lösung.

    Warum?

    Meine Lösung soll sein, dass hier eine Seite von sich aus selbstständig kontolliert ob der Frame geladen wurde oder ihn noch nachladen muss.

    Genau das leisten die genannten Lösungsmöglichkeiten.

    Noch einmal: ich würde dir absolut von der Benutzung des Scripts *abraten* und würde dir eine zweifach redundante Lösung mit HTML, JavaScript und Perl/PHP  wie oben beschrieben empfehlen.
    Die Cookie-Lösung hat fatale Auswirkungen, falls der Browser Cookies abweist, auch jeder Suchmaschinen-Robot würde in eine Endlosschleife tappen. Vermutlich ließe sich eine auf Cookies basierende Lösung ohne dieses Problem ausarbeiten (es ließe sich vom Frameset ein frames=true über den Query String an die Unterdokumente weitergeben, aber wer weiß, ob Suchmaschinen die Seite nicht mit ?frames=true indizieren?), was aber dennoch nichts daran ändert, dass eine alleinige Cookie-Lösung unzuverlässig ist.

    Grüße,
    Mathias