Kundengruppe mittels Plugin auslesen

Hallo, kann mir bitte jemand bei diesem Unterfangen helfen? Ich möchte auf Shopseiten die Möglichkeit haben, die Kundengruppe mittels der Variable {$sCustomerUserGroup} abzugfragen. Hier mein Versuch, es tut sich leider gar nichts: class Shopware\_Plugins\_Frontend\_SwagGetUserGroup\_Bootstrap extends Shopware\_Components\_Plugin\_Bootstrap { public function install() { $this-\>subscribeEvent('Enlight\_Controller\_Action\_PostDispatch','onPostDispatch'); return true; } public function onPostDispatchFrontend(Enlight\_Event\_EventArgs $args) { $request = $args-\>getSubject()-\>Request(); $response = $args-\>getSubject()-\>Response(); $customerId = Shopware()-\>Session()-\>sUserId; $CustomerUserGroup = $this-\>getCustomerUserGroup($customerId); $args-\>getSubject()-\>View()-\>assign("sCustomerUserGroup",self::$CustomerUserGroup); } function getCustomerUserGroup($customerId) { $sql = "SELECT customergroup from s\_user WHERE id = $customerId"; $customerGroup = Shopware()-\>Db()-\>fetchRow(); $customerGroup = $customerGroup['customergroup']; return $customerGroup; } }

Hallo jogol, die Ursache liegt schon direkt in der Install-Methode. Zunächst erstellst du ein Event: public function install() { $this-\>subscribeEvent('Enlight\_Controller\_Action\_PostDispatch','onPostDispatch'); return true; } Dort benutzt du das globale PostDispatch-Event und willst dann die Methode onPostDispatch aufrufen. Anschließend erstellst du jedoch eine Methode mit dem Namen onPostDispatchFrontend. Siehst du das Problem? Du kannst nun also entweder den Namen in der Install-Methode anpassen: public function install() { $this-\>subscribeEvent('Enlight\_Controller\_Action\_PostDispatch','onPostDispatchFrontend'); return true; } oder aber den Namen der eigentlichen Methode selbst. Übrigens: Du solltest deine Funktion “getCustomerUserGroup” wiefolgt anpassen: private function getCustomerUserGroup($customerId) { $sql = "SELECT customergroup FROM s\_user WHERE id = ?"; $customerGroup = Shopware()-\>Db()-\>fetchOne($sql, array($customerId)); return $customerGroup; } Die Methode hätte nach deinem Code nie funktionert, da du $sql nie weiter verwendet hast. :slight_smile: Außerdem benutzt du in deinem Code “self::$CustomerUserGroup”, das wird auch nicht funktionieren. Lass einfach das “self::” weg. :wink: Gruß, Patrick :shopware:

1 Like

Die Variable ist schon in der Session gesetzt, einfach so abfragen: $sCustomerUserGroup = Shopware()-\>Session()-\>sUserGroup;

1 Like

Danke für die wertvollen Inputs. Ich hab jetzt folgende 2 Varianten probiert. Bei beiden bekomme ich die Kundengruppe nicht im Frontend auf einer Shopseite mittels {$sCustomerUserGroup} angezeigt. Und im Backend kommt eine Fehlermeldung. Variante 1: class Shopware\_Plugins\_Frontend\_SwagGetUserGroup\_Bootstrap extends Shopware\_Components\_Plugin\_Bootstrap { public function install() { $this-\>subscribeEvent('Enlight\_Controller\_Action\_PostDispatch\_Frontend\_Index','onPostDispatchFrontend'); return true; } public function onPostDispatchFrontend(Enlight\_Event\_EventArgs $args) { $controller = $args-\>getSubject(); $request = $controller-\>Request(); $response = $controller-\>Response(); $view = $controller-\>View(); if(!$request-\>isDispatched() || $response-\>isException() || !$view-\>hasTemplate()) { return; } $CustomerUserGroup = Shopware()-\>Session()-\>sUserGroup; $args-\>getSubject()-\>View()-\>assign("sCustomerUserGroup",$CustomerUserGroup); } } Variante 2: class Shopware\_Plugins\_Frontend\_SwagGetUserGroup\_Bootstrap extends Shopware\_Components\_Plugin\_Bootstrap { public function install() { $this-\>subscribeEvent('Enlight\_Controller\_Action\_PostDispatch\_Frontend\_Index','onPostDispatchFrontend'); return true; } public function onPostDispatchFrontend(Enlight\_Event\_EventArgs $args) { $controller = $args-\>getSubject(); $request = $controller-\>Request(); $response = $controller-\>Response(); $view = $controller-\>View(); if(!$request-\>isDispatched() || $response-\>isException() || !$view-\>hasTemplate()) { return; } $customerId = Shopware()-\>Session()-\>sUserId; $CustomerUserGroup = $this-\>getCustomerUserGroup($customerId); $args-\>getSubject()-\>View()-\>assign("sCustomerUserGroup",$CustomerUserGroup); } private function getCustomerUserGroup($customerId) { $sql = "SELECT customergroup FROM s\_user WHERE id = ?"; $customerGroup = Shopware()-\>Db()-\>fetchOne($sql, array($customerId)); return $customerGroup; } } Fehler im Backend: Resource "shop" not found failure in Shopware/Components/DependencyInjection/Container.php on line 192 #7 Shopware/Plugins/Community/Frontend/SwagGetUserGroup/Bootstrap.php(31): Shopware-\>Session() #8 Enlight/Event/Handler/Plugin.php(149): Shopware\_Plugins\_Frontend\_SwagGetUserGroup\_Bootstrap-\>onPostDispatchFrontend(Object(Enlight\_Controller\_ActionEventArgs)) Könntet ihr bitte so lieb sein und nochmal drüberschauen? Danke!

Um die Fehlermeldung im Backend weg zu bekommen nimmst Du am besten folgenden Event Enlight_Controller_Action_PostDispatchSecure_Frontend anstatt Enlight_Controller_Action_PostDispatch. Was sagt den das Debug Plugin/Firebug wenn Du das Plugin aktiviert hast? Existiert die Variable überhaupt?

1 Like

Hi, warum “Frontend_Index    $this-\>subscribeEvent('Enlight\_Controller\_Action\_PostDispatch\_Frontend\_Index','onPostDispatchFrontend');

1 Like

Danke für eure Inputs. Hab´s nun hinbekommen!

Für alle die es schnell und einfach haben wollen, hab ich mal ein kleines Plugin in den Store gestellt, welche die Kundengruppenvariable im Template zur Verfügung stellt: Zum Plugin

@jogol schrieb:

Danke für eure Inputs. Hab´s nun hinbekommen!

Hi, könntest du deine finale Lösung zur Verfügung stellen?

Die Kundengruppe als Variable

{$sUserData.additional.user.customergroup}

 

Mit freundlichen Grüßen 

Jakob

Und einmal hier als kostenloses Plugin für alle:

3 Likes