Auswahl der Kundengruppe über ein Selectfeld - greift nicht auf Startseite

Ich möchte, dass der Kunde, sofern nicht eingeloggt, über ein Dropdown Select auswählen kann, ob er Shopkunden oder Händlerpreise angezeigt bekommt.

Dazu will ich ein eigenes Plugin schreiben. Die Funktion " getSubscribedEvents" sieht wie Folgt aus:

‘Enlight_Controller_Action_PostDispatchSecure_Frontend’ => ‘onPostDispatch’,
 ‘Enlight_Controller_Action_PostDispatchSecure_Frontend_Index’ => ‘onPostDispatch’,
 ‘Enlight_Controller_Action_PostDispatchSecure_Frontend_Listing’ => ‘onPostDispatch’,
‘Enlight_Controller_Action_PostDispatchSecure_Widgets’ => ‘onPostDispatch’,
 ‘Enlight_Controller_Action_PreDispatch_Widgets_Listing’ => ‘onPostDispatch’,

 

Der Callback " onPostDispatch": 

    public function onPostDispatch (\Enlight_Event_EventArgs $args){
        
        $controller = $args->getSubject();
            $request = $controller->Request();
            $response = $controller->Response();
            $view = $controller->View();
            $showSwitcher = 0;
            $customerGroupSelected = 0;
            $loggedIn = Shopware()->Modules()->Admin()->sCheckUser();
            
        
            if($loggedIn){
                return;
            }
 
            $showSwitcher = 1;        

            $k = Shopware()->Session()->sUserGroup;
            $view->assign(‘showSwitcher’, $showSwitcher);
            $view->assign(‘userGroup’, $k);

    }

 

In der topbar-navigation.tpl binde ich den  Select ein, der die setCustomergroup-Action meines Plugin-Controllers “Switcher” aufruft.

topbar-navigation.tpl:

{block name="frontend_index_top_bar_nav"}
{if $showSwitcher == 1}

 Preise werden angezeigt für: 
 

                                        
                                                
                                                        Privatkunden
                                                
                                                 
                                                        Öffentliche Einrichtungen
                                                
                                        


{/if}
{$smarty.block.parent}
{/block}

 

Diese Funktion sieht wie Folgt aus: /Widgets/Switcher.php

         function setCustomergroupAction(){
            $cookie_name = “customerGroupSet”;
            $kundengruppe = $this->Request()->getPost(‘customerGroup’);
            //$postVariables = $this->Request()->getPost();
            Shopware(  )->Session(  )->sUserGroup = $kundengruppe;
    
            $this->redirect();

        }

 

Den Redirect auf die Startseite lasse erfolgen, da die ControllerAction keine TPL Datei zugeordnet bekommt.

Das funktioniert auch schon FAST.

Jedoch scheint die Zuweisung der Kundengruppe über Shopware()->Session()->sUserGroup auf der Startseite, auf die man weitergeleitet wird, nicht zu greifen.

Wähle ich “Öffentliche Einrichtungen” aus, so wid auf der Startseite dennoch im Select angezeigt, dass ich als Privatkunde unterwegs sei. Auf allen anderen Seite, wird die Session Variable aber korrekt gesetzt.

Hat hier vielleicht jemand eine Idee, wie dieses Verhalten zustande kommt?

Merci :slight_smile:

 

 

Es geht schon (bin gerade selber an so ein Plugin dran).
Das Problem: der HTTP-Cache!
Der unterscheidet nämlich an den Stellen nicht,  ob die Kundengruppe abweichend ist - das geht über ein Cookie.
Dieses müsstest Du auch noch abhängig der Kundengruppe erweitern - z.B. auf dem Event Shopware_Plugins_HttpCache_ContextCookieValue
Die nächste Stolperfalle lauert dann bereits auf Dich, wenn der Kunde mehr als ein Tab auf hat.

Ohne „Cookie“-Salzen hatte ich so Effekte wie: Preis war Teilweise Kundengruppe 2, und Artikelslider noch aus Cache Kundengruppe 1

Ich würde mich  auch nicht darauf verlassen, dass bei Dir wirklich die zweite Seite richtig ist, diese wird dann wahrscheinlich für alle anderen User falsche Werte anzeigen.
Es wird das angezeigt, was zuerst im Cache landet. Auf Seite eins eben der „Privatkunde“, auf Seite 2 dann der „Händler“  Wink

Ist nicht so trivial, wie Du meinst.
Generell habe ich mich auf keine post/pre-Dispatch gesetzt, sondern einen eigenen Controller und biege in dem dann die Kundengruppe in der Session um.

 

Ich bin noch ziemlich neu was Shopware Programmierung angeht.

Das heißt, dann dass ich über die Session wahrscheinlich nicht zuverlässig erreichen kann, was ich bewerkstelligen will?

Magst du mir vielleicht etwas genauer erklären was mit den folgenden Sätzen gemeint ist?

-Ohne “Cookie”-Salzen hatte ich so Effekte wie: Preis war Teilweise Kundengruppe 2, und Artikelslider noch aus Cache Kundengruppe 1

 

  • Generell habe ich mich auf keine post/pre-Dispatch gesetzt, sondern einen eigenen Controller und biege in dem dann die Kundengruppe in der Session um.

–>Ich setze doch auch über die Controller Action meines Plugin Controllers wie Kundengruppe in der Session. Oder meinst du hier was anderes?

 

Danke dir, für die Antwort :)