mehrere Frames ändern (keine 0815 Frage!)
lucutus0
- javascript
Hallo!
Nachdem ich mich nun Stunden um Stunden mit folgendem Problem abrackere, stell ich hier mal die Frage, ob mir wer helfen kann.
Auf meiner Startseite (normale html-Seite) stehen Links zu den verschiedenen "Unterpunkten". Wenn man nun auf einen Link klickt, möchte ich, dass ein Frameset geladen wird, in dem die jeweiligen Frames geladen werden (im Navigationsfenster (1) die zu diesem Unterpunkt passende Navigation, im Hauptfenster (3) der Txt, usw.)
Wie man mehrere Links innerhalb eines Framesets verändert weiß ich(dank SELFHTML). Aber nicht, wenn das Frameset zuerst überhaupt mal geöffnet werden muss.
Mein Frameset sieht ungefähr so aus:
+-------------------+
| | 2 |
| |-------------|
| | |
| 1 | 3 |
| | |
| |-------------|
| | 4 |
+-------------------+
Mein JS-Code, der auf der Startseite steht:
function open_service(uri1,f1,uri2,f2,uri3,f3) {
window.open("frameset.htm","parent");
frame1=eval("parent."+f1);
frame2=eval("parent."+f2);
frame3=eval("parent."+f3);
frame1.location.href = uri1;
frame2.location.href = uri2;
frame3.location.href = uri3;
}
Der Link, um das ganze in Gang zu setzten:
<a href="javascript:open_service('nav.htm','nav','banner.htm','oben','service.htm','mitte')"
Soweit ich das durchschauen kann liegt mein Problem darin, dass zwar das Frameset geöffnet wird, die "Frameänderungen" sich aber nicht auf das neue Fenster beziehn, sonder auf die Startseite.
Hoffentlich hab ichs einigermaßen verständlich erklärt.
Vielen Dank, falls sich jemand mir erbarmt
lucutus0
hi,
soweit ich das verstanden habe, solltest du ganz einfach drei [oder wie viele unterpunkte du auch immer hast] verschiedene framesets verwenden, die alle auf dem selben aufbauen, aber andere dateien laden.
Malte
post scriputm: ein praktisches beispiel wäre nicht schlecht... [--> link]
Wow. Is ja echt genial, wie schnell man hier reagiert.
Das mit den verschiedenen Framesets würde natürlich funktionieren. Allerdings möchte ich nicht eins für jeden Menüpunkt machen ;-)
Hab grad die Dateien testhalber hochgeladen:
www.ubz-stmk.at/test/indexNEU.php
...und hier dann auf "Service" klicken. Die anderen Punkte enthalten noch die alten Links.
Thx
lucutus0
hi,
Wow. Is ja echt genial, wie schnell man hier reagiert.
danke :o)
Das mit den verschiedenen Framesets würde natürlich funktionieren. Allerdings möchte ich nicht eins für jeden Menüpunkt machen ;-)
naja, wenn es funktioniert und du keine andere lösung findest, nutz' diese...
Malte
... und überhaupt: was machst du, wenn wer JavaScript de-aktiviert hat?
Malte
... und überhaupt: was machst du, wenn wer JavaScript de-aktiviert hat?
iiih. Stell nicht solche Fragen ;-)
Da is es natürlich auch wieder besser, mehrere Framesets zu machen. Wird mir wohl nix übrig bleiben.
Hi!
Werd ich auch machen. Nur wär es toll, wenns so funktionieren würde.
Trotzdem, danke für deine Mühe.
lucutus0
Hi,
Soweit ich das durchschauen kann liegt mein Problem darin, dass zwar das Frameset geöffnet wird, die "Frameänderungen" sich aber nicht auf das neue Fenster beziehn, sonder auf die Startseite.
Ja , da du mit parent.framename immer auf die Frames im aktuellen
Fenster zugreifst.
Öffne das Fenster doch und speicher den Handle in eine Variable, udn greif dann drauf zu, etwa so:
Mein JS-Code, der auf der Startseite steht:
function open_service(uri1,f1,uri2,f2,uri3,f3) {
mywin = window.open("frameset.htm","parent");
frame1=eval("mywin.parent."+f1);
frame2=eval("mywin.parent."+f2);
frame3=eval("mywin.parent."+f3);
frame1.location.href = uri1;
frame2.location.href = uri2;
frame3.location.href = uri3;
}
Dann dürfte das Frameset in dem neuen Fenster geändert werden.
Gruß
ueps
Hi!
Danke für deine schnelle Antwort. Habs gerade probiert. Leider funktionierts nicht. Er öffnet mir zwar die Seite (was er vorher auch tat), aber er ändert die Frames nicht.
Hast noch ne Ahnung, woran es liegen kann?
Danke
lucutus0
Hi!
Danke für deine schnelle Antwort. Habs gerade probiert. Leider funktionierts nicht. Er öffnet mir zwar die Seite (was er vorher auch tat), aber er ändert die Frames nicht.
Hast noch ne Ahnung, woran es liegen kann?
function open_service(uri1,f1,uri2,f2,uri3,f3) {
mw = window.open("http://www.ubz-stmk.at/test/frs1.htm","parent");
frame1=eval("mw.parent."+f1);
frame2=eval("mw.parent."+f2);
frame3=eval("mw.parent."+f3);
frame1.location.href = "http://www.ubz-stmk.at/test/"+uri1;
frame2.location.href = "http://www.ubz-stmk.at/test/"+uri2;
frame3.location.href = "http://www.ubz-stmk.at/test/"+uri3;
}
Also bei mir hats funktioniert, kann auch sein
das es mit href nicht klappt wenn nicht die ganze URL angegeben wird.
Entweder du musst es so machen wie ich oben.
Oder du nimmst location.replace(uri1)
Gruß
ueps
Hallo,
Soweit ich das durchschauen kann liegt mein Problem darin, dass zwar das Frameset geöffnet wird, die "Frameänderungen" sich aber nicht auf das neue Fenster beziehn, sonder auf die Startseite.
soweit ich sehen kann, steht Dir doch PHP zur verfügung. (da der Link, den Du in einem anderen Posting http://www.ubz-stmk.at/test/indexNEU.php lautet). Dann erzeuge doch einfach eine Datei frameset.php, die etwa so aussieht (ich hab' mir jetzt den Code der Frameseite genommen):
---------------------------------------------------------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
"http://www.w3.org/TR/html4/frameset.dtd">
<?php
// folgendes nur aus Sicherheitsgründen:
$page_nav = basename ($_GET["page_nav"]);
$page_top = basename ($_GET["page_top"]);
$page_middle = basename ($_GET["page_middle"]);
?>
<html>
<head>
<title>Umwelt-Bildungs-Zentrum Steiermark</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<frameset cols="200,*" frameborder="1" border="1" framespacing="0">
<frame src="<?=$page_nav?>" name="nav">
<frameset rows="50,*,80">
<frame src="<?=$page_top?>" name="oben">
<frame src="<?=$page_middle?>" name="mitte">
<frame src="--unten--" name="unten">
</frameset>
</frameset>
<noframes>
<body bgcolor="#FFFFFF" text="#000000">
</body>
</noframes>
</html>
---------------------------------------------------------
und von der Datei index.php wird die so aufgerufen (die Dateinamen hab' ich mir vom ersten Link auf der Seite genommen):
<a href="frameset.php?page_nav=nav_service.htm&page_top=frs2_oben_service.htm&page_middle=frs2_mitte_service.htm">link</a>
Damit brauchst Du nicht mal JavaScript und es funktioniert in wirklich jedem Browser, der Frames unterstützt.
Grüße,
Christian
Hallo!
Danke für deinen Vorschlag, php dafür zu verwenden. Ich habs in diesem Fall einfach mal probiert, um nen Mini-Counter einzurichten. Allerdings hab ich (noch) nicht viel Ahnung davon.
Hab nach deiner Anleitung die Modifikationen gemacht und raufgeladen. Allerdings sind die Frames alle leer :-(
Hab ich was falsch gemacht, oder muss man da noch was ändern?
Danke für all eure Mühe und Zeit
lucutus0
ps. Der php-Aufruf ist testhalber ganz links oben unter "link".
Hallo,
Hab ich was falsch gemacht, oder muss man da noch was ändern?
Vielleicht PHP 4.0? ($_GET und die anderen Superglobalen variablen wurden erst in PHP 4.1 eingeführt) Dann müsste $_GET durch $HTTP_GET_VARS ersetzt werden. Falls es dann immer noch nicht klappt, wäre die Ausgabe von
<?php php_info (); ?>
sehr nützlich (natürlich in einer separaten Datei z.B. info.php)
Achtung: der untere Frame war in meinem Skript nicht vorhergesehen (weil ich in deinem JS-Code nirgendwo was dazu entdeckt habe). Wenn Du den unteren Frame auch einbinden willst, mussst Du die Dateien indexNEU.php und frameset.php entsprechend ändern.
Außerdem solltest Du folgendes beachten: aus Sicherheitsgründen mache ich ein basename() der Parameter in der frameset.php, d.h. ich schneide evtl. angegebene Pfade ab und nehme nur den Dateinahmen; daher funktionieren Unterverzeichnisse nicht. Am sichersten und elegantesten wäre es jedoch, wenn Du eine Liste mit gültigen Dateien hättest, und die dann benutzen würdest. Es gibt also nur noch ein Parameter pages (z.B. href="frameset.php?pages=service" od. href="frameset.php?pages=projekte") und es werden in der frameset.php 3 assoziative Arrays fest eingegeben, die die ganzen Seitendateien enthalten.
Dies würde dann so aussehen (Anfang der Datei):
<?php
$navs = array ("service" => "nav_service.htm", "projekte" => "nav_projekte.htm", ...);
$oben = array ("service" => "frs2_oben_service.htm", "projekte" => "frs2_oben_projekte.htm", ...);
$mitten = array ("service" => "frs2_mitte_service.htm", "projekte" => "frs2_mitte_projekte.htm", ...);
if (!isset($navs[$_GET["pages"]]) || !isset($oben[$_GET["pages"]]) || !isset($mitten[$_GET["pages"]])) {
// ungültige Seiten angegeben -- also Standardseiten verwenden
$page_nav = "nav_standard.htm";
$page_top = "frs2_oben_standard.htm";
$page_middle = "frs2_mitte_standard.htm";
// (andere Möglichkeit wäre auch auf index.php zurückzuleiten)
// das ginge dann so (folgende Zeile auskommentieren):
// Header ("Location: http://" . $_SERVER["REMOTE_HOST"] . dirname($_SERVER["PHP_SELF"]) . "/indexNEU.php");
// dazu dürfte aber dann nichts vor dem <?php stehen, also
// müsste die Doctype drunter
} else {
$page_nav = $navs[$_GET["pages"]];
$page_top = $oben[$_GET["pages"]];
$page_middle = $mitten[$_GET["pages"]];
}
?>
der Rest dann so wie vorher... (obwohl: falls es PHP 4.0 ist und der erste Quellcode nur mit $HTTP_GET_VARS statt $_GET funktioniert müsste auch im unteren $_GET durch $HTTP_GET_VARS und $_SERVER durch $HTTP_SERVER_VARS ausgetauscht werden)
Grüße,
Christian
Hi Christian!
Hab so ne info.php gemacht und tatsächlich -> Version 4.0.6
Nach der Änderung von &_GET funkt es toll. DANKE!!!!!!!!
Du scheinst ja ein Profi in Sachen PHP zu sein. Ich hab oft das Problem, dass ich vor einer Aufgabe steh und nicht weiß, wie man sie am besten löst. Aber Gott sei Dank gibt es dieses Forum!
Nochmals vielen, vielen Dank. Diese Lösung gefällt mir nun echt gut.
lucutus0