jogoljogol MemberComments: 11 Received thanks: 2 Member since: May 2013 edited July 2015
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;
  }
  
}

Comments

  • Patrick StahlPatrick Stahl ModeratorComments: 496 Received thanks: 209 Member since: August 2011
    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. :-)
    Außerdem benutzt du in deinem Code "self::$CustomerUserGroup", das wird auch nicht funktionieren.
    Lass einfach das "self::" weg. ;)

    Gruß,
    Patrick :shopware:
    Thanked by 1jogol
  • kubekube MemberComments: 66 Received thanks: 7 Member since: November 2013
    Die Variable ist schon in der Session gesetzt, einfach so abfragen:
    $sCustomerUserGroup = Shopware()->Session()->sUserGroup;
    
    Thanked by 1jogol
  • jogoljogol MemberComments: 11 Received thanks: 2 Member since: May 2013
    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!
  • ThomasThomas EmployeeComments: 481 Received thanks: 70 Member since: March 2014
    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?
    Thanked by 1jogol
  • CreatixxCreatixx MemberComments: 550 Received thanks: 131 Member since: August 2012
    Hi,

    warum "Frontend_Index"
        $this->subscribeEvent('Enlight_Controller_Action_PostDispatch_Frontend_Index','onPostDispatchFrontend');
    
    Thanked by 1jogol
  • jogoljogol MemberComments: 11 Received thanks: 2 Member since: May 2013
    Danke für eure Inputs. Hab´s nun hinbekommen!
  • Bastler123Bastler123 MemberComments: 14 Received thanks: 0 Member since: February 2015
    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
  • konsikonsi MemberComments: 326 Received thanks: 5 Member since: April 2014
    Danke für eure Inputs. Hab´s nun hinbekommen!

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

  • SikoSolarSikoSolar MemberComments: 2 Received thanks: 0 Member since: August 2016

    Die Kundengruppe als Variable

    {$sUserData.additional.user.customergroup}

     

    Mit freundlichen Grüßen 

    Jakob

  • kanumakanuma MemberComments: 231 Received thanks: 50 edited February 2018 Member since: May 2014

    Und einmal hier als kostenloses Plugin für alle:

    https://github.com/marcmanusch/PaulCheckGroup

    Thanked by 1panagenda
Sign In or Register to comment.