Formulardaten (Modul) beim Neuladen der Seite beibehalten

  • Hallo,

    hat jemand einen Tipp für mich wie ich Formulardaten nach dem Reload der Seite beibehalten kann?


    Ich habe eine eigene Komponente geschrieben welche im Frontend alle Einträge als Liste ausgibt inkl. Pagination. Die Liste wird über ein Modul gefiltert. Das funktioniert soweit auch. Nur wenn ich die Pagination nutze und z.B. auf Seite Zwei springe wird das Modul (Formular) ja neu geladen und alle Werte sind weg – demzufolge wird die Liste auch nicht mehr gefiltert.


    Gibt es eine Möglichkeit die Werte zu merken? Im Komponenten-Formular würde dies ja mit "$this->setState()" gemacht – geht das auch irgendwie im Modul?


    Mirko

  • Nur so hingedacht:


    Wohl am ehesten über die Nutzer-Session?? $app->setUserState($key, $value) und $app->getUserState($key, $default = null). Aber ich weiß halt nicht, wie das Modul da genau filtert und zu welchem Zeitpunkt.


    Andere, vielleicht parallele, Variante wäre vielleicht, die Filterdaten in der Pagination festzuhalten. Als "stinknormale" Request-GET-Daten. Da arbeite ich dann bevorzugt mit pagination->getPaginationLinks(), weil mir persönlich das overriden via Joomlas JLayouts links.php und link.php "einfacher" erscheint. (Aber ich glaub, das ist sowieso so üblich in Joomla-Frontend.)

  • Ich habe eine eigene Komponente geschrieben welche im Frontend alle Einträge als Liste ausgibt inkl. Pagination. Die Liste wird über ein Modul gefiltert. Das funktioniert soweit auch. Nur wenn ich die Pagination nutze und z.B. auf Seite Zwei springe wird das Modul (Formular) ja neu geladen und alle Werte sind weg – demzufolge wird die Liste auch nicht mehr gefiltert.

    Das hört sich für mich eher nach einem konzeptionellen Fehler an, wenn ich es richtig verstanden habe.... du filterst per JS? Sprich wenn du initial 10 Seiten hast und nach "sflkjgnsdfjklhglk" suchst, was nirgends vorkommt, dann hast du (wenn denn dein Filter bestehen bleiben würde) 10x eine leere Seite, wenn die Pagination bedient wird?

  • Nein, ich filtere nicht mit JS. Das Filter-Formular ist mit einem Modul realisiert. Die Daten Ansicht werden über eine Komponente ausgegeben. Beim versenden des Formulars holt sich die Komponente (im Model) die Daten über "$this->getUserStateFromRequest();" das funktioniert auch. Das Modul macht das gleiche.


    Wenn ich aber auf Seite 2 der Komponente wechsle, werden die Filterdaten nicht übernommen – was an sich auch logisch, da das Filter-Formular im Modul ja nicht versendet wird.


    Ich will aber die eingegebenen Daten behalten und suche dafür eine Lösung - wenn möglich eine einfache und Joomla konforme Lösung.



    Mirko

  • Bin davon ausgegangen, dass das nur innerhalb der Komponente funktioniert. Zudem werden einzelne Formularfelder auf Basis der Datenbank zusammengebaut. In der Komponente gibt es auch ein Filterformular was perfekt funktioniert. Nur benötige ich das Formular auch als Modul damit ich es außerhalb der Komponente aufrufen kann.


    Mirko

  • Nur so hingedacht:


    Wohl am ehesten über die Nutzer-Session?? $app->setUserState($key, $value) und $app->getUserState($key, $default = null). Aber ich weiß halt nicht, wie das Modul da genau filtert und zu welchem Zeitpunkt.


    Andere, vielleicht parallele, Variante wäre vielleicht, die Filterdaten in der Pagination festzuhalten. Als "stinknormale" Request-GET-Daten. Da arbeite ich dann bevorzugt mit pagination->getPaginationLinks(), weil mir persönlich das overriden via Joomlas JLayouts links.php und link.php "einfacher" erscheint. (Aber ich glaub, das ist sowieso so üblich in Joomla-Frontend.)

    Hab es mal mit $app->setUserState() und $app->getUserState() versucht, scheint nicht zu funktionieren oder ich hab was falsch gemacht. Versende ich das Formular des Moduls funktioniert "UserState" sowohl im Modul, wie auch in der Komponente. Nur leider werden die Werte beim Seitenwechseln (Pagination) nicht übernommen.


    Mirko

  • Ich hab's hinbekommen! Manchmal sieht man den Wald vor lauten Bäumen nicht.


    Es ging sogar relativ simpel via "getUserState" bzw. "setUserState".


    In der View der Komponente musste ich bei "protected function polulateState()" die Werte aus der Formularrückgabe zusätzlich via setUserState ablegen. Im Modul dann wieder via getUserState holen.


    Danke für eure Anregungen, ohne die wäre ich gar nicht weiter gekommen.


    Mirko