DOM-Datei in anderen Frame laden

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

  • DOM-Datei in anderen Frame laden

    Hallo an alle,

    ich habe das Problem, dass ich mit php den Inhalt eines anderen Frames aktualisieren möchte.

    Es geht darum, dass ich in einem Frame (F2) ein Suchformular habe, in diesem Frame die komplette Suche durchführe, kontrolliere und mit php die Ergebnisse in ein DOM-Dokument einfüge ($xmldok = domxml_new_doc(..)). Dieses DOM-Dokument mit den Suchergebnissen soll im Erfolgsfall in einem anderen Frame (F5) dargestellt werden (z.B. mit $xmldok->dump_file(..) oder dump_mem(..)). Wie kriege ich aber das DOM-Dokument mit php in den anderen Frame? Entschuldigung, wenn die Frage vielleicht zu blöd ist, aber ich komme dabei einfach nicht weiter.

    Zur Verdeutlichung meines beabsichtigten Seitenaufbaus (www dot h-bauer dot de):
    Frames auf der linken Seite:
    - F1: Seitennavigation
    - F2: Suchformular (geplant)
    - F3: Verstecker Frame für Sounds
    - F4: Statistik und noch ein paar Kleinigkeiten
    Frame auf der rechten Seite:
    - F5: Hauptframe zur Seitendarstellung und für die Suchergebnisse

    Für jedwede Hinweise bin ich sehr dankbar.
    Mit den besten Wünschen
    Hans Bauer


    P.S.: Der Vorschlag, im Form-Tag des Suchformulars einfach den Frame F5 als Target vorzugeben ist leider nicht sinnvoll, da dabei bei jedem Suchlauf - unabhängig davon ob Ergebnisse gefunden wurden oder nicht, der Frame F5 aufgefrufen und neu geladen werden würde. Das ist aber nicht erwünscht!

    Die php-Suche habe ich die letzten Wochen programmiert und sie funktioniert bereits auf framelosen Seiten. Jetzt muss die Suche nur noch auf Seiten mit Frames laufen, dann werde ich das Programmm unter der GPL zum kostenfreien Download anbieten.
    Zuletzt geändert von Hans Bauer; 15.09.2006, 11:08.

  • #2
    Re: DOM-Datei in anderen Frame laden

    Original geschrieben von Hans Bauer
    Wie kriege ich aber das DOM-Dokument mit php in den anderen Frame?
    In dem du entweder direkt auf _top zielst, und das komplette Frameset ersetzt - oder gar nicht.

    PHP interessiert sich nicht für irgendwelche Konstrukte wie Frames, die es auf dem Client vielleicht gibt.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Danke

      Vielen Dank wahsaga,

      das erklärt mir dann auch, warum ich dazu trotz ausgiebiger Suche in der php Dokumentation keine Antwort gefunden habe.

      Auf _top zu zielen (meinst du damit den Verweis target="_top" im form-Tag?) und dann damit alle Frames neu einrichten zu müssen, erscheint mir in Anbetracht der Fülle doch etwas mühselig und vor allem nicht ohne weiteres übertragbar auf den allgemeinen Fall. Das Script soll schließlich unter der gpl freigegeben werden.

      Gibt es aber vielleicht alternativ dazu die Möglichkeit das mit php erzeugte DOM-Dokument via Javascript an einen anderen Frame zu übergeben? Unter Javascript kenne ich bislang nur die Möglichkeit eine bestehende Datei über parent.frame_name.location.href=".." einzulesen. Ich möchte hier aber nicht das DOM-Dokument zunächst abspeichern müssen (eventuelle Konflikte bei Mehrfachzugriff), sondern nur den Datenstream (z.B.: $xmldok->dump_mem(..)) an das Dokument des Frames weiterleiten.

      Nochmals vielen Dank und vielleicht hat zu obiger Fragestellung jemand eine Antwort parat.

      Vielen Dank für eure Hilfsbereitschaft
      Hans Bauer

      Kommentar


      • #4
        Re: Danke

        Original geschrieben von Hans Bauer
        Auf _top zu zielen (meinst du damit den Verweis target="_top" im form-Tag?) und dann damit alle Frames neu einrichten zu müssen, erscheint mir in Anbetracht der Fülle doch etwas mühselig und vor allem nicht ohne weiteres übertragbar auf den allgemeinen Fall. Das Script soll schließlich unter der gpl freigegeben werden.
        Und dann verwendet es immer noch Frames ...?
        Gibt es aber vielleicht alternativ dazu die Möglichkeit das mit php erzeugte DOM-Dokument via Javascript an einen anderen Frame zu übergeben? Unter Javascript kenne ich bislang nur die Möglichkeit eine bestehende Datei über parent.frame_name.location.href=".." einzulesen. Ich möchte hier aber nicht das DOM-Dokument zunächst abspeichern müssen (eventuelle Konflikte bei Mehrfachzugriff), sondern nur den Datenstream (z.B.: $xmldok->dump_mem(..)) an das Dokument des Frames weiterleiten.
        Du musst es nicht speichern - du brauchst nur eine Ressource, die dieses Dokument ausliefert, und die du per JS in den Frame laden kannst.

        Also bspw. Formulardaten in Session speichern, per JS Script XY in Frame laden - und Script XY mit den Daten aus der Session on-thy-fly das Dokument erzeugen lassen.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          Vielen Dank

          Vielen Dank für die rasche Antwort.

          So wie es aussieht kommt doch noch mehr Arbeit auf mich zu als ich zunächst befürchtet hatte. Na dann mal frisch an die Arbeit... Das Ergebnis werde ich gerne in diesem Forum bekanntgeben. Vielleicht kann es ja dann auch anderen als Hilfestellung dienen.

          Nochmals vielen Dank für die rasche Hilfe.
          Hans Bauer

          Kommentar


          • #6
            Sorry für mein begrenztes Javawissen

            Hallo wahsaga und der Rest des Forums.

            Sorry für die erneute Störung. Ich habe bis jetzt versucht, die vorstehenden Vorschläge umzusetzen. Mir ist inzwischen klar, wie ich Informationen in Sessions speichere und wie ich mit Javascript den Inhalt eines Dokuments ändern kann. Ich habe es auch geschafft aus dem Suchframe (F2) eine Javascript-Routine im Ergebnisframe (F5) aufzurufen.

            Aber wie schaffe ich es, im Ergebnisframe (F5) per Javascript auf die Sessiondaten des Suchframes (F2) zuzugreifen? Ich habe hier einen fürchterlichen Hänger.

            Die Übergabe des kompletten html-codes des Suchergebnisses via Argument von (F2) nach (F5) an eine Javascriptfunktion scheint leider nicht zu funktionieren, oder habe ich im nachfolgenden Beispiel einen Fehler gemacht?
            Code:
            Im Frame (F2):
            --------------
            <?php
            $text = "Der html-code des Suchergebnisses ist hier drin";
            print "<script type=\"text/javascript\">\n";
            print  "parent.F5.location.href = 'F5.html';";
            print  "parent.F5.includeResults(\"" . $text . "\")";
            print "</script>";
            ?>
            
            Im Frame (F5) ist die Datei 'F5.html':
            --------------------------------------
            <html><head></head>
            <body bgcolor="#EEEEEE">
            <script type="text/javascript">
             function includeResults(html_text) {
               document.getElementById("content").firstChild.nodeValue = html_text; }
            </script>
            <span id="content">...</span>
            </body></html>
            Nochmals herzlichen Dank für die Hilfsbereitschaft
            Hans Bauer
            Zuletzt geändert von Hans Bauer; 15.09.2006, 16:28.

            Kommentar


            • #7
              Re: Sorry für mein begrenztes Javawissen

              Original geschrieben von Hans Bauer
              Aber wie schaffe ich es, im Ergebnisframe (F5) per Javascript auf die Sessiondaten des Suchframes (F2) zuzugreifen?
              Javascript greift gar nicht auf Sessiondaten zu - Sessiondaten werden serverseitig gespeichert, und darauf hat JS keinen Zugriff.

              Wenn ich mich dann nochmal selbst zitieren darf:
              Also bspw. Formulardaten in Session speichern, per JS Script XY in Frame laden - und Script XY mit den Daten aus der Session on-thy-fly das Dokument erzeugen lassen.
              Mit dem fett markierten ist natürlich ein serverseitiges Script gemeint, welches du in den Frame hineinlädst.
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                Bin wohl zu dusselig

                Servus wahsaga,

                herzlichen Dank für die rasche Antwort. Aber ich bin wahrscheinlich zu dusselig - oder zu verbohrt - um Deine Antwort deuten zu können. Auch ich vermutete, dass Javascript als clientseitige Lösung nicht auf die Serverseite von php zugreifen kann. Mit meinem Versuch den html-code via Javascript auf den Zielframe (F5) zu übertragen habe ich doch schon einen kleinen Teil geschafft, oder bin ich vielleicht auf dem falschen Dampfer mit meinem Code-Beispiel?

                Nur wie schaffe ich es, damit ein Html-Dokument zu bauen? Ich ging (und gehe noch) davon aus, dass das auch nur über Javascript geht, da ja außer dem Laden des nackten Dokuments (via parent.F5.location.href = 'F5.html') keine serverseitigen Informationen dazugefügt werden. Wenn ich den Inhalt des <span>-tags mit den übermittelten Daten des '$text' aktualisiere (in der Folgezeile des Beispiels), dann blitzt zwar teilweise kurz der eingefügte Text auf, wird dann aber gleich wieder vom Ursprungstext ersetzt. Ich vermute, der Zielframe wird dann - aus irgendwelchem Grund - ein zweites Mal nachgeladen und überschreibt damit wieder die übermittelten Änderungen.

                Wie gesagt, ich sitze vielleicht auch nur auf der Leitung und hoffe auf einen kleinen Schupps, so hoffe ich wenigstens. Könntest Du vielleicht einen kleinen Tip geben, wie ich die Informationen, die ich via Javascript (clientseitig) in den Zielframe lade dort 'on-the-fly' übernehmen und weiterverarbeiten kann?

                Hoffentlich ist Dir die Frage nicht zu dumm, ich würde mich jedenfalls über Deine Antwort sehr freuen. Ich finde im übrigen Deinen Einsatz in diesem Forum sehr vorbildlich, es zeigt mir, dass es doch noch Leute gibt, die nicht nur auf den Profit aussind, sondern aus Überzeugung gerne helfen. Darum auch ein ganz besonderer Dank an Dich und dieses Forum.

                Mit den besten Wünschen und Grüßen
                Hans Bauer

                Kommentar


                • #9
                  Stand auf der Leitung

                  Sorry wahsaga,

                  ich stand wohl mehr als nur auf der Leitung und glaube jetzt verstanden zu haben wie es funktionieren kann:
                  1.) Im Frame (F2) starte ich eine php-session.
                  2.) Der zu übertragende Content wird in (F2) nach der Durchführung der Suche in einer Session-Variable gespeichert
                  3.) Mit Javascript lade ich im Erfolgsfall eine php-Datei in den Ergebnisframe (F5). Dabei übergebe ich die Session-ID beim Aufruf.
                  4.) Jetzt kann ich in der php-Datei in (F5) auf die Session-Variable zugreifen und die entsprechende Ergebnisdatei mit php on-the-fly aufbauen.

                  Nochmals vielen Dank und Entschuldigung für meine lange Leitung.
                  Beste Grüße
                  Hans Bauer

                  Kommentar


                  • #10
                    Re: Stand auf der Leitung

                    Jepp, genau so war's gemeint.
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Kommentar

                    Lädt...
                    X