Viennamade: | (.*) modales Fenster öffnen

Hallo liebe Forumer!

Den Themenbereich habe ich mit Sicherheit falsch gewählt, aber wenn man nicht weiter weiß ist es doch gut zum Ausgangspunkt zurückzugehen.
Und vielleicht finde ich so die richtigen Ansprechpartner ;-)

In einer html-Form pflegt der Anwender Daten. Dort möchte ich ihm die Möglichkeit geben ein Fenster zu öffnen um aus möglichen Werten welche auszuwählen.

1.
Solange dieses Popup-Fenster offen ist, soll der Anwender mit dem Ursprungsfenster nicht agieren dürfen.
Ich habe mir gedacht, da wäre Javascript das richtige ... im Archiv habe ich aber gelesen, daß dies just mit Javascript unmöglich ist. Äh, womit mache ich es denn dann?

2.
Die Auswahl eines Elements im Popup soll einen entsprechenden Eintrag im Inputfeld des Ursprungfensters vornehmen und das Popup soll geschlossen werden. Das ist aber vorderhand nicht so wichtig, aber die Möglichkeit darf durch 1 nicht verbaut werden.

Wie soll ich es angehen?

Beste Grüße
Viennamade

  1. Hi,

    Solange dieses Popup-Fenster offen ist, soll der Anwender mit dem Ursprungsfenster nicht agieren dürfen.

    das nennt sich "neue Seite".

    Ich habe mir gedacht, da wäre Javascript das richtige ... im Archiv habe ich aber gelesen, daß dies just mit Javascript unmöglich ist. Äh, womit mache ich es denn dann?

    Mit nichts. Insbesondere wäre, selbst _wenn_ es mit JavaScript möglich wäre, dies keine Lösung, weil JavaScript selbst nicht möglich ist. Zumindest bei all jenen, die es deaktivert haben.

    Wie soll ich es angehen?

    Keine verlässliche clientseitige Technik vermag derartiges zu bewerkstelligen, keine serverseitige Technik kommt bei Verwendung des Wortes "Fenster" in Frage. Also nimm eine neue Seite zur Auswahl.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hello,

      Keine verlässliche clientseitige Technik vermag derartiges zu bewerkstelligen, keine serverseitige Technik kommt bei Verwendung des Wortes "Fenster" in Frage. Also nimm eine neue Seite zur Auswahl.

      Der Begriff des "Fensters" ist nicht immer an etwas sichtbares gebunden. Es gibt neben den (Popup-)Fenstern auch Zeitfenster und Speicherfenster und Fensterdiskriminatoren usw...

      Und die Lösung der Aufgabe heißt Formularsteuerung der Vorgangsbearbeitung. Dazu legt man die "Fenster" in der Session ab und kann dazwischen hin und her blättern. Ein abhängiges Fenster (das ist ja hier gemeint) sperrt die Bearbeitung in einem übergeordneten solange, bis in diesem entweder der Button "close all dependant Windows" gedrückt wird, oder in denm depandant Window der "Cancel" oder der "Return selected Value"-Button gedrückt wird. Das abhängige Fesnter weiß, von welchem Objekt es aufgerufen wurde und in welches Feld der Session es den Rückgabewert eintragen muss. Danach wird es aus der Session beseitigt und das Mutterfenster wieder angezeigt.

      Das alles spielt sich im Browser innerhalb eines Fensters ab. Damit es keine Probleme gibt, wenn ein User trotzdem ein dependant im neuen Browser-Fenster öffnet (das geht nur über Manipulation des Formulars oder durch Fehler im Browser) bekommt jeder Response eine Unique-ID, die ungültig wird, sowie der logische Rückweg genommen wurde.

      Damit das Ganze dann so aussieht, wie ein modales Popup, kann man natürlich alle Register bei CSS ziehen. Man kann mittwels JavaScript sogar soweit gehen, dass das "modale Fenster" verschiebbar über dem Mutterfenster und in gewissen Grenzen auch resizable wird. (siehe Stempelgeheimnis)

      Ich hoffe, das reicht als Anregung erstmal wieder für die Abendstunden. Ich bin da *gg*

      Harzliche Grüße aus http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
      1. Hallo Tom!

        Wenn ich Deine Antwort richtig verstehe und die sicherheitsrelevanten Aspekte und jene der möglichen Formular- und Datenkorrelation weglasse, dann glaube ich Dich so verstanden zu haben - zumindest auf ein einfaches Beispiel bezogen:

        Der Anwender hat ein Formular vor sich zur Adreßeingabe. Für 2 Felder wird eine Datenauswahl zur Verfügung gestellt (vergessen wir mal, daß sich ein select-Element anbietet). Klickt der Anwender bei Dir auf "Postleitzahlenhilfe" dann wird die URL nochmals gestartet und innerhalb eines Layers werden die Postleitzahlen angezeigt. Wird eine angeklickt, dann schreibst Du die PLZ ins Feld. Per Javascript wenn diese aktiviert, neuerlicher URI-Aufruf wenn js deaktiviert. Das Gleiche mit Vorwahlen.

        Ist es das (abgesehen, daß es natürlich viel komplizierter ist g)?

        Beste Grüße
        Viennamade

        1. Hello,

          Der Anwender hat ein Formular vor sich zur Adreßeingabe. Für 2 Felder wird eine Datenauswahl zur Verfügung gestellt (vergessen wir mal, daß sich ein select-Element anbietet). Klickt der Anwender bei Dir auf "Postleitzahlenhilfe" dann wird die URL nochmals gestartet und innerhalb eines Layers werden die Postleitzahlen angezeigt. Wird eine angeklickt, dann schreibst Du die PLZ ins Feld. Per Javascript wenn diese aktiviert, neuerlicher URI-Aufruf wenn js deaktiviert. Das Gleiche mit Vorwahlen.

          Immer nur per Post an das zentrale Script. Das lädt sich dann das passende Formular dazu (include, eval oder sonstwas). Es geht nur über die Session, da sonst dem Server nicht nbekannt wäre, dass der Vorgang noch offen ist, wenn er reentrant aufgerufen wird. Darauf muss er entsprechend reagieren. Manchmal ist Reentranz erlaubt, manchmal unerwünscht. Aber in der Session muss dann auf jeden Fall durch eine zusätzlich Instanz der Variablen reagiert werden.

          Daran knabbere ich gerade noch. Der Rest funktioniert bereits.

          Harzliche Grüße aus http://www.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
          1. Hallo Tom!

            Der Anwender hat ein Formular vor sich zur Adreßeingabe. Für 2 Felder wird eine Datenauswahl zur Verfügung gestellt (vergessen wir mal, daß sich ein select-Element anbietet). Klickt der Anwender bei Dir auf "Postleitzahlenhilfe" dann wird die URL nochmals gestartet und innerhalb eines Layers werden die Postleitzahlen angezeigt. Wird eine angeklickt, dann schreibst Du die PLZ ins Feld. Per Javascript wenn diese aktiviert, neuerlicher URI-Aufruf wenn js deaktiviert. Das Gleiche mit Vorwahlen.

            Immer nur per Post an das zentrale Script. Das lädt sich dann das passende Formular dazu (include, eval oder sonstwas). Es geht nur über die Session, da sonst dem Server nicht nbekannt wäre, dass der Vorgang noch offen ist, wenn er reentrant aufgerufen wird. Darauf muss er entsprechend reagieren. Manchmal ist Reentranz erlaubt, manchmal unerwünscht. Aber in der Session muss dann auf jeden Fall durch eine zusätzlich Instanz der Variablen reagiert werden.

            Daran knabbere ich gerade noch. Der Rest funktioniert bereits.

            Im Prinzip habe ich es verstanden, auch - Zitat Cheatah - »so dass es nicht nur auf einen Einzelfall gemünzt ist, kostet das tierisch Konzeptions- und Entwicklungsaufwand ».
            Aber meine Lösung muß ja nicht allgmeingültig und wiederverwendbar sein.

            Beste Dank
            Viennamade

            1. Hello,

              Im Prinzip habe ich es verstanden, auch - Zitat Cheatah - »so dass es nicht nur auf einen Einzelfall gemünzt ist, kostet das tierisch Konzeptions- und Entwicklungsaufwand ».
              Aber meine Lösung muß ja nicht allgmeingültig und wiederverwendbar sein.

              Dann verzichte am Anfang auf

              • Reentranz
              • mehrere Vorgangsketten parallel
              • Selbstbezug
              • Optisch gestapelte Fenster, jede Seite nimmt im Browser das ganze Fenster
                -- Verschiebbarkeit
                -- Skalierbarkeit

              Das Eine bedingt manchmal das Andere. Der Selbstbezug erfordert die Reentranzfähigkeit.

              Beispiel

              Kundendatei mit den Adressen
                enthält Datenfeld: woher stammt die Adresse
                Wenn ich das nun ausfüllen will, mudd dort die Adressnummer eines anderen Datensatzes
                eingetragen werden.
                Die bekomme ich, indem ich indem ich erneut min die Kundenliste einsteige, die aber
                eventuell schon unter dem "Insert-Form" geöffnet ist

              Harzliche Grüße aus http://www.annerschbarrich.de

              Tom

              --
              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
              Nur selber lernen macht schlau
          2. Hallo wiederum!

            Es geht nur über die Session

            Ich habe mal im php-Manual gelesen, daß man in einer Sessions keine handles (ich denke dabei an einen handle zu einem Abfrageergebnis) ablegen kann. Empfinde ich als Sauerei ;-) Kann man das irgendwie umgehen? Frage ich so ganz ungeniert :-)

            Beste Grüße
            Viennamade

            1. Hello,

              Es geht nur über die Session

              Ich habe mal im php-Manual gelesen, daß man in einer Sessions keine handles (ich denke dabei an einen handle zu einem Abfrageergebnis) ablegen kann. Empfinde ich als Sauerei ;-) Kann man das irgendwie umgehen? Frage ich so ganz ungeniert :-)

              Du kannst Das Handle zwar in der Session speichern, aber es wird ja mit dem Ende des Scriptes ungültig. Du kannst also nur das gesamte Abfrageergebnis speichern. Das macht man insbesondere dann, wenn man in Ruhe einen Snapshot (also eine Abfrage) abarbeiten will.

              Es würden ja aber ggf. schon die IDs, die Feldliste, der Name der Tabelle sowie die Sortierung genügen. Aus der Liste kannst Du dann jedesmal einen Teilbereich neu auslesen.

              ... where ID in (".implode(','$_ID).") limit $offset $limit";

              Ist aber bestimmt nur sinnvoll, wenn die Anzahl der selektierten Zeilen nicht so groß wird ...

              Harzliche Grüße aus http://www.annerschbarrich.de

              Tom

              --
              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
              Nur selber lernen macht schlau
      2. Hallo,

        Also nimm eine neue Seite zur Auswahl.

        Und die Lösung der Aufgabe heißt ... Dazu legt man die "Fenster" in der Session ab und kann dazwischen hin und her blättern.
        Das alles spielt sich im Browser innerhalb eines Fensters ab.

        Genau das _ist_ doch aber dann eine neue Seite im Browser-Fenster für jedes Deiner "Fenster", so wie Cheatah vorgeschlagen hat.

        Für die Auswahl forderst Du eine neue Seite an, auf der der alte Inhalt zwar noch zu sehen, aber nicht mehr bedienbar ist und über dem Inhalt liegt ein DIV, welches das modale Fenster darstellt.

        Nach Auswahl aus dem modalen Fenster-DIV wird wieder eine neue Seite angefordert, auf der dann der ursprüngliche Inhalt, ergänzt durch die Auswahl, wieder bearbeitbar zu sehen ist usw...

        Neue Seite heißt neuer HTTP-Request vom Browser. Das kann durchaus die selbe PHP-Ressource auf dem Server sein.

        Oder habe ich es falsch verstanden?

        viele Grüße

        Axel

        1. Hello,

          Neue Seite heißt neuer HTTP-Request vom Browser. Das kann durchaus die selbe PHP-Ressource auf dem Server sein.

          Oder habe ich es falsch verstanden?

          Nein. Das ist richtig.
          Ich sollte da mal eine Runde "Begriffsdefinition" einlegen - auch für mich selbst ;-))
          Neue Seite im selben Browserfenster.
          Der Formularstapel muss aber trotzdem jedes Mal vollständig neu aufgebaut werden, da man ja nicht genau weiß, wo das verdeckende "Fenster" liegt. Mit Unterstützug von JS kann man sich dann aber merken, wohin der User das Fenster das letzte Mal geschoben hatte.

          Was leider noch nicht bei allen Browsern funktioniert, ist "overflow:auto;" bei den DIVs.
          Das ärgert mich.

          Harzliche Grüße aus http://www.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
      3. Moin!

        Der Begriff des "Fensters" ist nicht immer an etwas sichtbares gebunden. Es gibt neben den (Popup-)Fenstern auch Zeitfenster und Speicherfenster und Fensterdiskriminatoren usw...

        Der Begriff "modales Fenster" ist das aber schon.

        Und die Lösung der Aufgabe heißt Formularsteuerung der Vorgangsbearbeitung.

        Nein, die Lösung der Aufgabe heißt "es geht nicht allgemein, und im IE mit showModalDialog()" - wenn man eine proprietäre Lösung will.

        Ein modales Fenster ist immer eine Funktion der Benutzeroberfläche. Also kann ein wie auch immer konstruierter serverseitiger Mechanismus diese Funktion gar nicht nachbilden. Man kann als Programmierer allenfalls erzwingen, dass der Benutzer beim Verlassen des vom Programmierer vorgesehenen Weges dumm gegen die Wand läuft - niemals aber, dass der Benutzer so einen Fensterdialog öffnet und es sich dann doch anders überlegt und ohne das Fenster zu schließen einfach weitermacht.

        - Sven Rautenberg

    2. Hallo!

      Solange dieses Popup-Fenster offen ist, soll der Anwender mit dem Ursprungsfenster nicht agieren dürfen.

      das nennt sich ... Mit nichts ... keine Lösung ... Keine verlässliche ... Technik

      Schluck.

      Also nimm eine neue Seite zur Auswahl.

      Danke Cheatah
      Viennamade

      1. Hello,

        Solange dieses Popup-Fenster offen ist, soll der Anwender mit dem Ursprungsfenster nicht agieren dürfen.

        das nennt sich ... Mit nichts ... keine Lösung ... Keine verlässliche ... Technik
        Schluck.

        Das heißt, dass Cheatah bis eben keine eigene Idee hatte ;-)
        Aber ich wette, jetzt geht ihm ein Licht auf.
        Allerdings bastele ich an meinem Werkzeugkasten auch schon ziemlich lange und habe eigentlich erst in den letzen Tagen eine wohl nun beständige Struktur reinbekommen. Rückwirkend betrachtet sist alles "gaaanz einfach".

        Harzliche Grüße aus http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        1. Hi,

          Das heißt, dass Cheatah bis eben keine eigene Idee hatte ;-)
          Aber ich wette, jetzt geht ihm ein Licht auf.

          meinst Du das, was Du in https://forum.selfhtml.org/?t=89987&m=538641 beschrieben hast? Ich hatte gehofft (lies: ich ging davon aus), Viennamade würde etwas derartiges selbst einfallen. Wenn Du meine Antwort noch mal gründlich liest, wird Dir der ein oder andere Hinweis auffallen ;-)

          Cheatah

          --
          X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
          X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
          X-Will-Answer-Email: No
          X-Please-Search-Archive-First: Absolutely Yes
          1. Hello,

            Das heißt, dass Cheatah bis eben keine eigene Idee hatte ;-)
            Aber ich wette, jetzt geht ihm ein Licht auf.

            meinst Du das, was Du in https://forum.selfhtml.org/?t=89987&m=538641 beschrieben hast? Ich hatte gehofft (lies: ich ging davon aus), Viennamade würde etwas derartiges selbst einfallen. Wenn Du meine Antwort noch mal gründlich liest, wird Dir der ein oder andere Hinweis auffallen ;-)

            Das ist ja auch noch nicht ganz fertig. Aber ich ahbe die letzten Tage einige gute Fortschritte gemacht, die Polymorphien zu erkennen, den notwendigen Code gaaanz gewaltig zusammenzukürzen und nun langsam den Werkzeugkasten nochmal sauber aufzubauen.

            Das Ganze soll ja wahlweise auch an ein Backend auf Flatfilebasis oder en eines mit DB angeflanscht werden können. Und es soll ohne JavaScript funktionieren.

            Harzliche Grüße aus http://www.annerschbarrich.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau
            1. Hi,

              Das ist ja auch noch nicht ganz fertig. Aber ich ahbe die letzten Tage einige gute Fortschritte gemacht, die Polymorphien zu erkennen, den notwendigen Code gaaanz gewaltig zusammenzukürzen und nun langsam den Werkzeugkasten nochmal sauber aufzubauen.

              klare Sache. Wenn man das _richtig_ gut machen will, so dass es nicht nur auf einen Einzelfall gemünzt ist, kostet das tierisch Konzeptions- und Entwicklungsaufwand.

              Das Ganze soll ja wahlweise auch an ein Backend auf Flatfilebasis oder en eines mit DB angeflanscht werden können.

              Auch das noch! Willst Du damit Geld verdienen? :-) Zumindest scheint es so, als könntest Du das am Ende.

              Und es soll ohne JavaScript funktionieren.

              Natürlich, das ist Grundvoraussetzung.

              Cheatah

              --
              X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
              X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
              X-Will-Answer-Email: No
              X-Please-Search-Archive-First: Absolutely Yes