Hallo zusammen,
bin dabei meine erste extbase Extension zu machen. Bin auch sehr begeistert bisher. Die ganzen CRUD-Aktionen funktionieren super. Allerdings bereitet mir eine Sache Kopfzerbrechen.
Ich möchte nun eine Pagination, einen Filter und eine Sortierung einbauen. Die ganzen Daten gehen aber logischerweise immer verloren bei einem Pagerefresh (z.B nachdem man in der Detailansicht war).
Nun die ganz einfache frage:
Wie geht man korrekterweise vor wenn man eine Wert über pageloads der Extension hinweg halten möchte. Nicht in der DB.
Ich hoffe ihr könnt mir helfen.
Dank & Gruß
Ich habe festgestellt, dass es in solchen Fällen am einfachsten ist, den Filter als Model anzulegen und diesen auch in der DB zu speichern. Dabei muss nur darauf geachtet werden, dass jede Möglichkeit von Filterkombinationen nur einmal gespeichert wird. Das hat dann u.a. den Vorteil, dass man den Filter so überall ganz einfach in der URL mitschleifen kann. Aussderdem lässt sich so die Ergebnisliste ohne weiteres cachen.
Danke für den Tipp.
Soll das heißen die Datenbank ist die einzige Möglichkeit Daten zu halten? Wie initialisiere ich den Filter dann, wenn ich die Extension aufrufe?
Dann kann ich ja gleich mit SESSIONS arbeiten. Kann doch nicht sein, das sowas in Extbase nicht gibt. Also in der DB wollte ich flüchtige Daten wie einen Filter sicher nicht halten. Noch jemand?
Naja, die Frage ist, wie sollte es Extbase Deiner Meinung nach lösen?
Es gibt unabhängig von Extbase 3 Möglichkeiten:
1. Filter-Werte als GET-Variablen mitschleifen
2. Filter in Session speichern
3. Filter-Werte selbst speichern und dessen ID als GET-Variable mitschleifen
Fehlt noch was?
Alle 3 lassen sich in Extbase realisieren. Es geht eigentlich nur darum, was für Dich davon am einfachsten zu handhaben ist...
Ja, wenn Extbase keine Möglichkeit bietet, dann muss ich wohl auf eine Extbase unabhängige Lösung zurück greifen. Eigentlich wollte ich mich soweit möglich innerhalb des Frameworks bewegen.
Meiner Meinung nach sollte die Persistensschicht auch die Speicherung von werten übernehmen die "flüchtig" sind. Damit meine ich Daten die für eine "Session" gebraucht werden. wie eben ein filter, eine Sortierung, ein Paginate. Sobald man das Modul neu läd müssten diese Daten neu initialisiert werden.
Meinetwegen baue ich auch schnell ein Model zusammen. Dort müsste ich dann aber definieren können das die Daten nicht in der DB sondern im Speicher gehalten werden. Ergibt das nur für mich Sinn?
Aber danke für deine Antworten.
1./3. sind mir zuviel Arbeit. Deshalb werde ich wohl 2. die Sessions nutzen.
Da müsste ich jetzt noch wissen wie ich feststelle das die Extention neu geladen wird. (das man im linken baum die extension klickt). So das ich anständig initialisieren kann.
Verstehe, ich glaube Du meinst sowas hier: http://flow.typo3.org/documentation/guide/partiii/objectmanagement.html (Scope Session).
Das wurde bisher nicht für Extbase backported. Das geht also momentan erst ab Neos.
Da müsste ich jetzt noch wissen wie ich feststelle das die Extention neu geladen wird. (das man im linken baum die extension klickt).
Das kapier ich jetzt nicht ganz 🙂
Erkläre ich gern:
Ich rufe also meine Extension auf, setzte einen Filter. Dieser wird in die Session geschrieben. Dann gehe ich in ein anderes Modul. Lege z.B. einen neuen User an oder so. Dann gehe ich wieder in meine Extension. Nun ist der Filter immer noch gesetzt. Klar...ist ja in der Session gehalten. Ich würde aber als User erwarten das nun alle werte Initial sind.
Ich muss also feststellen wann die Extension neu geladen wird um die Werte Initialisieren zu können. Klar? 😉
Sind das alles Deine Module, kannst also den Quellcode ändern? Wenn ja, dann könntest Du es evt. per Signal/Slot machen.
http://blog.tolleiv.de/2011/11/signal-slots-in-extbase/
hmm. ich kann natürlich den slot in meinen modulen implementieren. aber das signal kann ich nicht tiggern. glaub ich #paralyzed#
die frage ist ja, wann soll ich das signal senden? wenn es in meinem modul ist, kann ich dort auch gleich den init manchen.
danke für deine mühe
Vlt. versteh ich dich ja auch falsch, aber du wirst ja in Deinen anderen Modulen irgendwelche Actions aufrufen. Und dort kannst Du an den Stellen wo Du´s benötigst das Signal triggern.
verstehe dich schon. nur sind es wie du bereits gefragt hast, nicht meine module.
aber selbst wenn. für eine so einfache aufgabe wie werte in der extension zu halten, so ein aufriss zu machen!?! :o
mit signal/slots oder session oder DB. das will mir bei einem ausgereiften cms wie typo3 nicht in den kopf. so langsam bin ich doch nicht mehr so ganz von extbase überzeugt.
folgende lösung hab ich gefunden. wenn ich das modul zum ersten mal aufrufe, ist der action parameter leer. das heißt immer wenn keine action übergeben wurde werde ich die session leeren. fühlt sich ganz dreckig an o.O mal sehen ob es klappt