Frames Nachladen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Frames Nachladen

    Wie man bei einem einfachen Frameset (ein Navigationsframe + ein Inhaltsframe) das ganze Frameset in die Inhalts-Frames nachlädt, weiß ich schon.

    Aber wenn das ganze komplexer wird und der Frameset wieder Sub-Framesets enthält, schaffe ich es nicht das komplette Framesets in die Inhalts-Frames der Sub-Framesets nachzuladen.

    Meine Homepage besteht beim Start aus zwei Frames:

    (1) Ober-Frame - topnavi.htm - mit Navigations-Buttons (z.B. -Software, -Hardware, -Artikel, -Tutorial usw.)
    (2) Unter-Frame - home.htm - als Startseite mit Inhaltsangabe zur Homepage.
    (3) Natürlich werden diese zwei Dateien über die Datei - index.htm - aufgebaut die so aussieht:

    #Datei Index.htm:

    Code:
    <html>
    <head>
    <script type="text/javascript">
    <!--
    if(parent.frames[1]){
    top.location.href = self.location.href; 
    } 
    
    var Frameset_geladen = "okay"; 
    
    function SeiteNachladen(){ 
    if(self.location.search.length > 0){ 
      var Search_Laenge = self.location.search.length; 
      var front_url = self.location.search.substring(1,Search_Laenge); 
      self.front.location.href = front_url; 
    } 
    } 
    
    --> 
    </script> 
    </head>
    
    <frameset border="0" rows="153,*" frameborder="0" onload="SeiteNachladen(); return true;">
      <frame name="menu0" src="topnavi.htm" marginWidth=0 marginHeight=0 frameBorder=1 noResize scrolling=no>
      <frame name="home" src="home.htm" marginWidth=0 marginHeight=0 frameBorder=1 noResize>
    </frameset>
    
    <noframes><body></body></noframes>
    </html>
    UND die Daei - home.htm - sieht wie folgt aus:

    #Datei home.htm:

    Code:
    <HTML>
    <head>
    <title>Content-Bereich</title>
    <script language="JavaScript">
    <!--
        //Auf jeder Seite, die nachgeladen wird.
        var fseite = "index.htm";
        if (top.location.href.lastIndexOf(fseite)<0)
    	top.document.location.href="./"+fseite+"?"+document.location.href;
    //-->
    </script>
    </head>
    
    <body onLoad="loadFrame()" bgcolor="#CCCCCC">
    <FONT SIZE="+2" COLOR="DarkSlateBlue">
    	<br><br><br>
    	<CENTER><B>WELCOME!<br><br>To MY WEBSITE</B></CENTER>
    </FONT>
    </BODY>
    </HTML>
    Nun, die Navigationsseite (der Oberframe) enthält Menüpunkte zum Anklicken. Jeder diese Menüpunkte (z.B. Menüpunkt "Software") ruft eine neue Datei index.htm auf, die einen SUB-FRAMESET aufbaut. Sie teilt den unteren Frame wieder in zwei neue Frames, und zwar in einen linken Frame, der wiederum eine Navigation mit weiteren Menüpunkten zum im oberen Navigationsframe gewählten Thema (z.B. Software), und in einen rechten Frame, der die Detailinformation zum geklickten Navigationspunkt im linken Bereich anzeigt.

    Nun habe ich das Problem, die Inhaltsframes der neuen Sub-Frameset in das gesamte Hauptframeset nachzuladen.

    Kann mir vielleicht behilflichsein und eine Lösung nennen, wie ich das mache?

    Ich habe in den letzten zwei Wochen das ganze Internet (Google, Altavista, Yahoo, Lycos) durchforstet, ich erhalte immer wieder die geliechen Inhalte, nämlich, das was ich schon weiß. Das, was ich im oberen INDEX.HTM und HOME.HTM eingebaut habe.


    Ich danke alle im voraus.
    EDIT:
    hat nichts mit PHP zu tun ** verschieb **
    Zuletzt geändert von asp2php; 25.08.2004, 09:07.

  • #2
    Hallo Armadi,

    für dein Problem gibt es verschiedene Lösungsmöglichkeiten:
    mit JavaScript: ein Beispiel findest du bei Selfhtml unter der Rubrik JavaScript, Anwendungsbeispiele, Zwei Frames gleichzeitig ändern
    mit PHP: du erstellt eine Seite mit zwei Frames und rufst per link im einen Frame eine PHP-Datei im zweiten Frame mit allen erforderlichen Parametern auf und baust mit PHP das Frameset im zweiten Frame (beliebige SubFrames) neu auf.

    Die Variante mit PHP hätte natürlich den Vorteil, dass auch Anwender die JavaScript deaktiviert haben mit deiner Seite arbeiten können - alles klar?!

    Kommentar


    • #3
      Frames Nachladen

      Eigetnlich ist das nicht die Lösung für mein Problen. Ich will nicht zwei Frames gleichzeitig in einem Fensterbereich
      anzeigen. Ich will nur einen Frame mit Inhalten im Hauptbereich, eingebunden in den Frame für die navigationsleiste
      oben und den Frame für die Navigationsframe links-unten.

      Zur besseren Veranschaulichzung gehe auf die Site: http://www.worldsoft.at.

      Diese Seite besteht zu Beginn aus nur zwei Frames, und zwar dem oberen Navigationsframe mit dem Namen menu.htm
      und dem unteren Inhaltsframe mit dem namen home.htm.

      Hier ist es kein Problem mittels Javascript oder PHP in den Frame home.htm den gesamten Framset nachzuladen.

      Klicke aber in der oberen Navigationsleiste auf das Button WEB-AUFTRITT!?

      Jetzt wird ein neuer Frameset im unteren Fensterbereich aufgebaut (eine neue Datei index.htm). Diese teilt den
      unteren Frame wieder in zwei neue Frames, und zwar in einen linken Frame mit dem Namen menu.htm (das ist
      nicht dieselbe Datei menu.htm, die im ersten Frameset stand), und einen rechten Frame. Die Startseite des
      Framesets WEB-AUFTRITT trägt den Namen profihomepage.htm. Das ist quasi die Homeseite dieses Buttons.
      Auch Klick auf den Vereweis-Button Profi-Homepage im linken Frame öffnet diese Seite.

      Nun Klicke auf ein Verweis-Button im linken Frame, z.B. auf das Button CM-Lösung. Jetzt öffnet sich die Datei
      cmloesung.htm im rechten Frame mit Beibehaltung des oberen und des linken Frames.

      Genau das will ich! Also wenn jemand im Windows-Explorer auf die Datei cmloesung.htm klickt, oder wenn eine
      Suchmaschine diese Datei findet und der Sucher auf die Link klickt, will ich, dass der gesamte Frameset mit dem
      oberen Navigationsframe, dem unteren linken Navigationsframe und dem unteren rechten Inhaltsframe nachgeladen
      und angezeigt wird.

      Es muss eine Lösung für diese verschatelte Framesets geben, denn wie man sieht, hat WORLDSOFT das.
      Zuletzt geändert von Armadi; 25.08.2004, 19:04.

      Kommentar


      • #4
        also mal sehen, ob ich das jetzt kapiert habe ... wenn jemand eine deiner Seiten aufruft möchtest du immer das gesamte Frameset laden und verhindern, dass ein einzelner Frame alleine angezeigt wird ?! Ist das so richtig??

        Wenn ja, gibt es bei SELFHTML ein Beispiel unter JavaScript um zu verhindern das eigene Seiten im Frame angezeigt werden. Also genau andersrum als dein Wunsch - aber das Prinziep ist dasselbe.

        Beim laden der Seite kannst du mit TOP prüfen ob der aktuelle Bereich in einem Frameset geladen ist oder nicht. Während das Beispiel auf SELFHTML prüft und bei Anzeige im Frame einen Relaod durchführt und die originale Seite als TOP lädt machst du es genau anders rum: wenn TOP dann die Hauptseite - in deinem Fall wohl die index... laden und entsprechende Parameter übergeben, damit die Frames wie gewünscht aufgebaut werden.

        HTH!

        Kommentar


        • #5
          Hallo Patrik!
          Hallo auch die anderen!

          Antwort auf deinen ersten Absatz: Ja, es stimmt. wenn jemand eine per Suchmaschinen ermittelte Link meiner Seiten
          aufruft, möchte ich immer, dass das gesamte Frameset geladen wird und verhindern, dass ein einzelner Frame alleine
          angezeigt wird.

          Ich weiß, es gibt in der großen Internetwelt eine Menge Scripts, die Framesets nachladen, und zwar einzelne sowie
          zwei oder mehr Frames.
          Mit den Scripts, die nur einen Frame in das gesamte Frameset nachladen, habe ich kein Problem, diese funktionieren
          tadellos.

          Aber leider komme ich mit den Scripts, die zwei oder mehr Frames reloaden nicht zurecht. Alle diese Scripts, die mehr
          Frames bearbeiten, behandeln nur ein einziges Haupt-Frameset mit mehreren Frames, aber nicht auch SUB-FRAMESETS,
          die vom HAUPT-FRAMEST aufgerufen werden.
          Das heißt, es gibt bei diesen Scripts aus dem Internet ein Frameset, das vom Anfang an aus z.B. drei Frames
          bestehen (Top, Links und Hauptframe).

          Am Besten übermittle ich euch meine komplette Website vereinfacht (ohne Daten) in ZIP-Form. Ich lege auch eine
          Beschreibung meines Problems in einer Winwor-Datei bei. Ihr könnt die Homepage bei euch adaptieren und
          herumexperimentieren damit.

          UND Bitte Bitte, schickt mir eure funktionierende Lösung, falls Ihr irgendwelche Lösung habt.


          Danke
          Angehängte Dateien
          Zuletzt geändert von Armadi; 29.08.2004, 22:29.

          Kommentar


          • #6
            Moin Armadi,

            hast du einen Web-Server mit PHP am laufen oder handelt es sich um statische Seiten die in einer lokalen Umgebung ohne Web-Server aufgerufen werden?

            Kommentar


            • #7
              Ich habe einen Apache Server mit PHP.

              Ein Javascript-gesteurtes Nachladen von Framesets muß aber nicht unbedingt in einer Server-Umgebung laufen.

              Das ganze hat nichts mit PHP und Server zu tun. Es läuft auch in einer lokalen Umgebung ohne Server (siehe das
              erste Frameset in der ZIP-DATEI. Wenn du auf die Datei main.htm klickst, wird das ganze erste Frameset geladen,
              auch ohne Server und PHP).

              Also mein Problem geht mit und ohne Server nicht auf.
              Zuletzt geändert von Armadi; 02.09.2004, 18:31.

              Kommentar


              • #8
                Hallo Armadi,

                meine Frage hatte folgenden Sinn: wenn eine Unterseite aufgerufen wird stellst du mit einem JavaScript fest, dass nicht das komplette Frameset geladen wurde und verweist auf die Hauptseite - das bekommst du ja hin ...

                Um jetzt in deinem Frameset die zuvor aufgerufene Einzelseite anzuzeigen musst du der Hauptseite noch mitteilen welchen Seiten ins Frameset geladen werden sollen. Dazu gibt es zwei Möglichkeiten (wahrscheinlich sogar noch viel mehr ;-))

                1.) in der Hauptseite fagst du mit PHP die Variable $_SERVER['HTTP_REFERER'] ab und bekommst so die Einzelseite von der aus du dein Frameset aufgerufen hast (mit Javascript). Jetzt weißt du welche Seite der User angefordert ahst und kannst entsprechend das Frameset mit PHP aufbauen.

                2.) mit JavaScript: du übergibts den Namen der seite als QueryString und wertest diesen auf der Hauptseite wiederum aus. Such mal bei google nach QueryString, da findest du eine Funktion zum Auslesen der Variablen.

                Manche User schalten JavaScript ab - dann geht eh nix mehr ... wer z.B. Norten InternetSecurity hat kommt mit dem Referer nicht mehr zurecht ... hat alles Vor- und Nachteile.

                Versuch ersteinmal den Reload einer Unterseite zu verhindern (Beispiel gibts wie gesagt bei SELFHTML). Und übergib per URL den Name der Seite.

                Den würde ich auf der Hauptseite erstmal per PHP auswerten - ist einfachen als mit JavaScript - und in eine Javascript-Varialbe schreiben. Dann kannst du per Javascript die Frames entsprechend bedienen.

                Alles klar ?! Wenn nicht kann ich dir am WE eine kleines Beispiel bastelt - melde dich einfach hier oder schick ne Mail oder PM ...

                BTW: Deine Seiten lösen bei mir im IE5.0 jede Menge JavaScript Fehler aus ... mit welchem Browser/Version arbeitest du ?!

                Kommentar


                • #9
                  Original geschrieben von Patrick_PQ
                  1.) in der Hauptseite fagst du mit PHP die Variable $_SERVER['HTTP_REFERER'] ab
                  du weisst aber, dass $_SERVER['HTTP_REFERER'] sehr unsicher ist und liefert u.U. nichts zurück

                  Kommentar


                  • #10
                    Ich habe die in der angehängten ZIP-Datei archivierten HTML-Dateien, insbesondere die HAUPTSEITE sowie die hier
                    in diesem Beitrag zitierten Quellcodes gründlich angesehen, aber eine derartige PHP-Abfrage mit
                    ($_SERVER['HTTP_REFERER'] ) habe ich nicht gefunden.

                    Ich weiß nicht, von wo du das hast. Ich habe schon einmal aus Verzweifelung versucht, das Problem mit PHP zu lösen,
                    es ist mir aber nicht gelungen.
                    Zuletzt geändert von Armadi; 03.09.2004, 18:14.

                    Kommentar


                    • #11
                      @asp2php: das HTTP_REFERER nicht unfehlbar ist habe ich doch auch angerissen - allerdings dürfte das bei einem lokalen Projekt eh ziemlich egal sein, da kann ich mir die Umgebung so einstellen wie es mir passt - und anständige Unternehmen haben wohl kaum Norten Internet-Security auf jeder Workstation ...

                      @armadi: HTTP_REFERER war ein Vorschlag von mir für dich zur Lösung - der steht nicht in deinen Scripten im zip.

                      Jetzt noch mal meine Frage: welchen Browser nutzt du und treten bei dir auch Fehler auf ?!?

                      Ich glaube hier kommen wir nicht um ein Beispiel herum ... ich bastel dir mal was - dauert einen Moment ... bis gleich!

                      Kommentar


                      • #12
                        Ich nutze IE 6.0. Und es treten keine Fehler auf ?!?. Es ist auch kein Problem des Internet Explorers.

                        Das Problem liegt dort, dass ich es nicht schaffe zwei Framesets (einen Haupt- und einen Sub-Framest) miteinander zu verlinken.

                        Du weißt, in der ZIP-Datei wird zuerst mittels einer Index.html ein Frameset mit einem TOP-Frame und ein anderer mit UNTER-Frame aufgebaut. Dann wird im TOP-Frame durch die Navigation eine zweite index.html aufgerufen, die ihrerseits einen Link-Frame und einen Rechts-Frame im unteren Fenster des ersten Framesets einbettet.

                        Kommentar


                        • #13
                          nun mal ganz ruhig ... das dein Problem nicht vom Browser abhängt ist mir schon klar. Allerdings benutze ich einen IE5.0 und bei MIR treten haufenweise JavaScript-Fehler auf, wenn ich die Seiten aus deinem Script lade.

                          Ich habe dir mal ein Beispiel gebastelt. Hier wird zwar nur ein Frame geändert, aber das Prinziep ist dasselbe - schau dir bitte mal mein Beispiel an und dann schauen wir mal wo es bei der Umsetzung mit den Sub-Frames scheitert.

                          Zur Lösung können - wie oben bereits gesagt - JavaScript und PHP kommen. JavaScript kann der User im Browser abschalten - darüber sollten wir uns im Klaren sein.

                          Wenn jetzt jemand eine Einzelseite aufrufen springen wir zurück auf die Index.htm und blenden die gewünschte Seite ein. Dazu müssen wir dem Script in index.htm sagen, welche Seite(n) gezeigt werden sollen. Dies geschieht in meinem Beispiel über die URL.

                          Parameter aus der URL lassen sich mit $_GET in PHP sehr einfach auslesen - mit JavaScript ist das schon schwieriger - besonders wenn mehrere Parameter im Spiele sind ... Das wäre bei den Sub-Frames wohl der Fall (für jeden Klick den der User sonst zum Aufruf der Seite über deine Navigation macht brauchen wir einen Parameter).

                          Um die Sache zu vereinfachen solltest du dir mal mit google ein Script suchen das den QueryString zerlegt. Einfach bei google die Begriffe QueryString und JavaScript eingeben.

                          Hier mein Beispiel:
                          Angehängte Dateien

                          Kommentar


                          • #14
                            (1). Das Laden von nur einem Frame habe ich bereits, und die funktioniert sehr gut. Siehe bzw. klicke auf die Datei main.htm in meinem ZIP-Attachment; es wird dadurch das gesamte erste Frameset geladen. Das Problem ist, dass ich vom Sub-Frameset aus das Haupt-Frameset nicht laden kann.

                            (2). Ich habe dein Beispiel runtergeladen. Beim Klick auf die Datei index.html wird erwartungsgemäß das ganze Frameset geladen, ein Ober-Frame, ein Links-Frame und ein Hauptframe rechts. Nur wenn ich auf die Datei detail1.html klicke, gerate ich in eine Endlos-Schleife. Die Seite ruft sich wiederholt auf, aber ohne irgendetwas zu zeigen.
                            Ich muß mit rechter Maustaste/close die Seite abbrechen, da werden aber auch alle meine anderen gerade offenen Internetseiten gekillt. Das heißt, der Aufruf geht nicht auf. Interessanterweise erhalte ich aber keine Fehlermeldung.
                            Bei deinem Beispiel fehlt etwas; du mußt auch in der Datei index.html ein Script schreiben, das das Laden
                            von einzelnen Seiten erwarten kann.

                            (3). In deinem Beispiel ist nur ein einziges Frameset mit drei Frames vorhanden (Oben, unten-links und unten-rechts). Mit so einem Konstrukt habe ich überhaupt kein Problem. Mit der Hauptseite (detail1.html) oder jeder anderen aus dem linken Frame getätigten Seitenaufruf kann sowohl mittels Javascript als auch mittels PHP alle drei Frames laden. Ich habe hingegen (in dem Beispiel im ZIP-Anhang) zwei Framesets mit je zwei Frames.
                            Zuletzt geändert von Armadi; 04.09.2004, 00:12.

                            Kommentar


                            • #15
                              Hast du denn verstanden was passiert wenn du die Datei "detail2.html" aufrufst ?

                              Und BTW: es ist egal ob du ein Sub-Frame hast oder vier ... wenn eine Einzelseite aufrufst wird per Javascript geprüft ob die Seite im Frameset geladen wurde oder solo.

                              Wurde die Seite solo geladen wird auf die Hauptseite verwiesen und per URL werden entsprechende Parameter mitgegeben, die dem Script in der Hauptseite sagen welche Seiten in die jeweiligen Frames geladen werden sollen.

                              Wenn du also einen Frame "main" hast und da eine Datei mit zwei weiteren Frames reinlädst ("sub1" und "sub2") werden beim Aufruf von "sub2" als Einzelseite der Hauptseite zwei Parameter mitgegeben. Der erste Parameter gibt an welche Seite in den Frame "main" geladen wird und der zweite gibt an welche Seite in den Frame "sub1" geladen wird.

                              Das kannst du beliebig forstsetzen. Für jede Ebene wird ein Parameter benötigt. Die Schwierigkeit mit Javascript liegt darin die URL nach den Parametern zu durchsuchen. Das geht mit PHP viel einfacher ...

                              Und das Script darf nicht in die Seiet mit dem Frameset eingebunden werden ...

                              Kommentar

                              Lädt...
                              X