Hallo Community, beim Logout wird die Funktion sLogout() der Core-Klasse sAdmin nicht aufgerufen. Und als Folge: es wird in meinem Plugin die fürs Event PluginShopware_Modules_Admin_Logout_Start registrierte Funktion auch nicht ausgeführt. Welche Funktionen/Events sind denn dafür zuständig? Bei mir läuft Shopware 4.2.3. Auch bei der jungfräulichen 4.2.3 Installation sehe ich, dass die sLogout() gar nicht aufgerufen wird.
Ja ich hatte da beim Logout auch das Problem, das da meine Funktion nicht aufgerufen wurde. Ich habe das Problem dann irgendwie umschifft. Ich weiß ja nicht was du vorhast aber ich ich habe das so gelöst, dass ich mir bei den user_attributes die letzte Session gespeichert habe und mich dann bei einem anderen sinnvollen event eingeklinkt habe oder alternativ ein before-Hook (z.B. Login XD) in welchem ich dann kucke ob die aktuelle Shopware->session mit der gespeicherten übereinstimmt. Falls nicht dann wird die Funktion ausgeführt. Keine Ahnung was du vorhast und ob diese Lösung bei dir dann auch funktioniert…
Ich möchte bei den ausgeloggten Benutzern den Warenkorb leeren. Alles ist schon programmiert, man muss nur beim Logout das aufrufen. Deswegen ist die Frage: wenn nicht mit der sLogout(), dann wo passiert das Ausloggen? Überall wird Shopware_Modules_Admin_Logout_Start erwähnt, was richtig ausschaut, aber gar nicht aufgerufen wird.
Würde dann ja mit meinem Workaround nicht funktionieren. Der Vollständigkeithalber hier trotzdem meine Methode. Vl. hilfts ja jemand anderem… Bootstrap.php: in der install(): $this-\>subscribeEvent('Enlight\_Controller\_Action\_PostDispatch\_Frontend', 'onPostDispatchFrontend'); //oder anderes Event oder Hook Shopware()-\>Models()-\>addAttribute( 's\_user\_attributes', 'steinsoftware', 'lastSession', 'TEXT', true ); Shopware()-\>Models()-\>generateAttributeModels(array( 's\_user\_attributes' ));
in der uninstall(): Shopware()-\>Models()-\>removeAttribute( 's\_user\_attributes', 'steinsoftware', 'lastSession' ); Shopware()-\>Models()-\>generateAttributeModels(array('s\_user\_attributes'));
zusätzliche Methode: public function onPostDispatchFrontend(Enlight\_Event\_EventArgs $arguments) { if( Shopware()-\>Modules()-\>Admin()-\>sCheckUser() ){ $theIdOfUser = Shopware()-\>Session()-\>sUserId; $actSession = Shopware()-\>SessionID(); $sql\_lastSession = "SELECT steinsoftware\_lastSession FROM s\_user\_attributes WHERE userID=$theIdOfUser"; $lastSession = Shopware()-\>Db()-\>fetchOne($sql\_lastSession); if ($actSession != $lastSession) { //TODO Funktion ausführen } } }
Ist zwar bischen unschön, weil hier auf den Kunden nicht mit der API zugegriffen wird, aber soll ja auch übersichtlich bleiben.
Ich habe meine Funktion an das andere Event angehängt, an das Enlight_Controller_Action_PostDispatch. Und dort die Action abgefragt:if(in\_array($args-\>getRequest()-\>getActionName(), array('ajax\_logout', 'logout'))) { // Hier meine Operationen (man kann Session bzw. Benutzer abfragen) }