PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : automatische Frameeinbindung



Lui-Kim-Su
23.08.2004, 03:05
Hallo,

meine Seite hat einen Navi Frame links und rechts den content Frame. Wenn jetzt Leute oder Suchmaschinen z.b. auf _link entfernt_ gehen, fehlt ihnen der Navigationsframe. Das ist ja keine Zustand, aber die Navi muss Frame bleiben, sonst müsste ich immer alle html Dateien ändern...

Es gibt eine Möglichkeit das wenn mann jetzt einen solchen_link entfernt_besucht der frame eingeblendet wird oder eine msg box kommt. Nur wie macht man das?

i_hasser
23.08.2004, 05:34
Du könntest ganz einfach einen Link draufsetzen, so nach dem Motto "wenn sie keine Frames sehen klickern sie gefälligst hier".

Mit javascript kannst du auch über Parents testen, ob gerade ein Frameset oder nicht angezeigt wird.

Lui-Kim-Su
23.08.2004, 09:36
Naja, eine msg-box mit "Klicken Sie ok um den Navigationsframe einzublenden, oder abrechen um die Seite ohne Navigation zu betrachten." wäre das beste. Nur wie realisiere ich das?

i_hasser
23.08.2004, 15:00
Na mit javascript. Meine letzten Script-Eskapaden sind aber schon zu lang her. Schau dir mal SelfHTML an, da steht auch javascript mit drinnen (in begrenzterem Umfang).

SKar
24.08.2004, 14:28
Hi,

Das HIER (http://www.pc-erfahrung.de/Index.html?FramesetNachladen.html) könnte dir weiterhelfen... und sonst einfach mal bei Google nach "Frameset nachladen" suchen..

Lui-Kim-Su
24.08.2004, 15:28
Original geschrieben von SKar
Hi,

Das HIER (http://www.pc-erfahrung.de/Index.html?FramesetNachladen.html) könnte dir weiterhelfen... und sonst einfach mal bei Google nach "Frameset nachladen" suchen.. Hi, ja ist eine Lösung. :)

Ich hatte jetzt mittlerweile überlegt ob man das nicht mit PHP lösen könnte. Das ein PHP Script die Beiden HTML dateien als eine Seite erscheinen lässt. Folgendes erhielt ich als mögliche Lösung:

<html>
<head>
<title>Jaja, meine güte</title>
</head>
<body>
<table border="0" width="97%" align="center">
<colgroup>
<col width="30%">
<col width="70%">
<tr>
<td valign="top">
<?php
if(!(@include('./navi.html'))) {
echo "Navigation konnte nicht eingebunden werden!";
}
?>
</td><td valign="top">
<?php
switch($_GET['content']) {
case "home":
@include('./home.html');
break;
case "impressum":
@include('./impressum.html');
break;
default:
@include('./home.html');
}
?>
</td>
</tr>
</table>
</body>
</html>

Dann wäre das impressum index.php?mode=impressum
Dafür müsste ich aber, wenn ich das richtig sehe alle HTMLs da eintragen. Und das wäre ein riesen Aufwand, wenn man bedenkt das jedes Bild in der Gallery eine HTML ist... oder sehe ich das falsch?

SKar
24.08.2004, 15:40
Die Lösung mit PHP wäre sicher die Beste. Damit du nicht für jede Seite eine Switch/Case - Anweisung benötigst, kannst du ja so etwas machen:
...
if (file_exists("./".$_GET['content'].".html"))
@include("./".$_GET['content'].".html");
else
//Standardseite

Lui-Kim-Su
24.08.2004, 17:48
Original geschrieben von SKar
Die Lösung mit PHP wäre sicher die Beste. Damit du nicht für jede Seite eine Switch/Case - Anweisung benötigst, kannst du ja so etwas machen:
...
if (file_exists("./".$_GET['content'].".html"))
@include("./".$_GET['content'].".html");
else
//Standardseite Ähm ja. PHP ist nur total kryptisch und unübersichtlich - und davon habe ich null Ahnung. Gibts da mal eine Seite die einem das gennau erklärt? (Nur wie ich PHP statt frames nutze - kein 1000 Seiten Ding)

SKar
25.08.2004, 12:17
ev. hilft dir diese (http://www.ehmig.net/homepage-service/php-tutorials/php_frames.html) Seite weiter. Für Syntax - Probleme kann ich sonst nur noch http://www.php.net/manual/de/ empfehlen.

btw: der von mir gepostete Code ist eigentlich ganz simpel: zuerst schaut man, ob die gewünschte Datei überhaupt existiert (file_exist) und falls ja, macht man ein include. Falls die Seite nicht existieren sollte ("else") kannst du ja z.B. die Startseite zeigen oder eine Fehlermeldung ausgeben.
Mit diesem Konstruckt hier : ".$_GET['content']." fügst du einfach den aktuellen Inhalt von content in das include ein...

i_hasser
25.08.2004, 12:22
Das dumme ist nur, dass du per ?content=../../abc auch HTML Seiten angucken könntest, die eigentlich nicht zugänglich sein sollten ;).

SKar
25.08.2004, 12:33
stimmt, in dem Fall müssen "/" und "../" noch aus dem String enfernt werden um das zu umgehen (wobei bei einem gut konfigurierten Server der Zugriff eh nur auf bestimmte Web-Verzeichnisse erlaubt sein sollte..)

i_hasser
25.08.2004, 12:42
Am besten wäre wohl eine lookup Table, also man übergibt nur eine Nummer und wenn ein Arrayindiz der Nummer entspricht wird die entsprechend hinterlegte URL geladen.

Beispiel:



$table[0]="./abc.html";
$table[1]="./def.html";
$table['hello']="./hello.html";

if array_key_exists('content', $_GET)
{
if array_key_exists($_GET['content'], $table) include($table[$_GET['content']]);
}


Das ist mit Abstand das sicherste.

SKar
25.08.2004, 12:48
@intel_hasser: nur hat man dann wieder das Problem, dass man alle Seiten von Hand eintragen muss..

i_hasser
25.08.2004, 12:50
Ja, ist aber trotzdem das sicherste ;).

Man könnte auch die Tabelle automatisch erstellen indem man ein einfaches 'tree' auswertet (also selektiv für bestimmte Verzeichnisse alle Dateien erlaubt).

OBrian
25.08.2004, 13:59
Also ich würde die JavaScript-Lösung nehmen, die SKar gepostet hat. Die ganze Seite auf PHP umzurüsten, ist ja auch unnötig.

Du mußt ja auch nicht alle Seiten ändern, die Bilderseiten werden nämlich eh nicht von Suchmaschinen gefunden, bzw. wenn einer nen separaten Link weitergibt, dann sowieso direkt auf die JPG-Datei. D.h. Du mußt gerade mal 10 Dateien oder so ändern, mit Copy&Paste ist das in 10min gemacht.

Und Zugriffe auf andere Verzeichnisse unterbindet man auch am besten und einfachsten direkt auf dem Server.