Hallo Community,
ich möchte Menüpunkte in der main-Navigation, abhängig von der aktuellen Kundengruppe anzeigen lassen. Zunächst habe ich folgendes:
public function install()
{
$this->subscribeEvent(
'Enlight_Controller_Action_PostDispatch_Frontend',
'postDispatch'
);
return true;
}
public function postDispatch(Enlight_Event_EventArgs $args)
{
$view->assign("kundengruppe",Shopware()->System()->sUSERGROUPDATA['groupkey']);
}
und im tpl.:
{extends file="parent:frontend/index/main-navigation.tpl"}
{block name='frontend_index_navigation_categories_top_after'}
{$kundengruppe} Test
{/block}
Jetzt kommt das mysteriöße. Wenn ich mir einen Artikel ansehe, zeigt er oben “Kundengruppe Test” an.
Gehe ich zur Startseite, zeigt er nur “Test” an. Wieso wird bei der Startseite die Kundengruppe nicht übergeben?
Habt Ihr Ideen?
Mit freundlichen Grüßen
schlueter550v
Also durch Debugging, weiß ich jetzt, dass die Events gewünscht feuern.
Nur wenn ich auf die Startseite klicke, wird die Variable kundengruppe leer gelasen.
Gibt es andere möglichkeiten die aktuelle Kundengruppe abzurufen?
Hi,
über den ShopContext kommst du daran:
/** @var ShopContextInterface $context */
$context = $this->get('shopware_storefront.context_service')->getShopContext();
$group = $context->getCurrentCustomerGroup();
Besten Gruß
Daniel
Muss ich das $this noch definieren? Weil der obere Code liefert immer ein leeres Resultat.
Hi,
achso, das war auf den Controller-Kontext bezogen. Aus der Plugin-Boostrap heraus sollte „$this->container->get“ gehen.
Besten Gruß
Daniel
Und welchen container muss ich benutzen? Weil wenn ich nur das container reinschreibe kommt
core.ERROR: Enlight_Exception: Property "container" not found failure
Ich hab es jetzt mal so gelöst:
$context = Shopware()->Container()->get('shopware_storefront.context_service')->getShopContext();
$group = json_encode($context->getCurrentCustomerGroup(), true);
$groupname = json_decode($group, true);
$view->assign("kundengruppe",$groupname[key]);
ich weiß nicht ob es sich besser lösen lässt, aber es funktioniert damit.