Ich habe mehrere Kundengruppen mit unterschiedlichen Preisen. Ich möchte nun, dass man mittels Button im Frontend (z.b. per Ajax-Request) zwischen verschiedenen Gruppen hin und herschalten kann.
Wo setz ich da am besten an? Gibt es bereits ne bestehende Action die ich dafür nutzen kann oder brauch ich nen eigenen Endpoint?
Hatte auch mal so ein Projekt gestartet, und erst nun auf Eis gelegt.
Es reicht nicht, in der Session nur die “Kundengruppe” zu ändern. Spätestens wenn Du den HTTP-Cache benutzt, musst Du auch da noch den Keks “x-cache-context-hash” umschreiben, damit nicht auch für die “neue” Kundengruppe die Daten aus der “ersten Gruppe” ausgeliefert werden (Einkaufswelten, Listen,…).
Für die “action” selber wirst Du wohl am besten einen eigenen (widget)-Controller anlegen und ein wenig mit AJAX arbeiten müssen.
Button => AJAX auf Controller => setzt Keks => Seite reload.
“Fertiges” habe ich zumindest doch nicht gefunden
Das war zumindest mein Ansatz
Dann musst Du natürlich noch überlegen, was passiert, wenn sich der “umgeschaltete Gast” registriert / anmeldet - ggf. musst Du dann auch da noch die Kundengruppe umschreiben.
mhh so nebenbei, wieso is this-\>container-\>get('session') sowie Shopware()-\>Session() leer, _SESSION aber hat die daten die ich such?
edit: nvm. my bad.
also direkt in die session zu schreiben funktioniert anscheinend. den cache cookie setzt er nach dem zweiten refresh ebenfalls. Mal noch ein bisschen rumspielen und halt halt so umschreiben dass man nicht beliebig von jder gruppe in jede wechseln kann. hier mal der prototyp. Das mit dem automatisch ner kundengruppe beim registrieren zuweisen hab ich schon indem ich den registerservice dekoriert hab. Mal schauen wie das auch mit dem Warenkorb ist, wenn da schon was drinliegt und man die gruppe switcht die aber andere preise hat
Bei mir hat das ohne CacheKeyExtender nicht zuverlässig funktioniert - insbesondere die Slider in den EKW waren da sehr unzuverlässig.
Noch eine Anregung:
Unter Chrome konnte ich beobachten, dass jeder TAB (wenn Kunde weitere Fenster öffnet) seinen eigenen Cache-Cookie hatte. Wechselt TAB1 Kundengruppe und danach TAB2 Link geklickt: Alte Kundengruppe.
Tipp: Bau dir einen JS-“Watchdog”, der immer wieder Dein Widget anpingt. Kundengruppe unverändert: keine Reaktion.
Kundengruppe geändet: Response Kundengruppe, dass JS bei geänderte Gruppe die Seite im TAB neu laden soll. Durch den Response SOLLTE sich auch im TAB das Cookie ändern, und danach hat auch das TAB die “richtigen” Preise
Ok, ich habe nun eine „Von Hinten durch die Brust ins Auge Lösung“, die aber anschienend soweit funktioniert:
Ich habe einen Endpoint, der die neue Kundengruppe in die Session schreibt. diese wird per ajax Call getriggert. Wenn der Ajax Call
erfolgreich war, wird per Javascript der x-cache-context-hash cookie gelöscht. Danach wird mit einem zweiten Javascript aufruf, ein zweiter Endpoint meines Controllers aufgerufen
der den neuen context cookie mitliefert. Der browser legt dann automatisch den cookie an. danach wird per Javascript die seite Neugeladen.
Mal die Tage weiter testen ob das so auch alles gut klappt. Jetzt noch schauen wie das mit dem Flyout Cart am besten geht, dass der sich auch gleich aktualisiert.
Wenn ich mal wieder Lust und Zeit habe, werde ich wohl *mein* Projekt auch noch einmal ausgraben und weiter entwickeln
THX für die Code-Freizügigkeit.
Mein „Basteltrieb“ ist irgendwie beim Umzug von Berlin nach NRW im Sommer noch in Berlin geblieben *lach*
Wobei bei mir das eigentlich auch mit einem AJAX und Reload später funktioniert hat.