$view->sCategories über Subscriber editieren?

Hallo Gemeine,

ich möchte in einem Plugin gern den Menü-Baum auf der linken Seite verändern und dort bestimmte Kategorien je nach einer Vorauswahl des Users entfernen oder einfügen.

Ich könnte hier einfach die entsprechenden Smarty-Templates nutzen, aber ich denke es wäre effektiver, früher anzugreifen - nämlich an dem Punkt, in dem die Kategorien für die Sidebar abgerufen werden.

Wie ich gesehen habe, werden die Sidebar-Kategorien in dem Shopware ControllerBase Plugin gesucht und festgelegt. Dieses hat einen Subscriber zu Enlight_Controller_Action_PostDispatch, in dessen Listener die verschiedenen aktiven und anzuzeigenden Kategorien geholt werden:

$view->sCategoryStart = $shop->getCategory()->getId();
$view->sCategoryCurrent = $this->getCategoryCurrent($view->sCategoryStart);
$view->sCategories = $this->getCategories($view->sCategoryCurrent);
$view->sMainCategories = $view->sCategories;

Genau diese Variablen möchte ich nun gern überschreiben. Im besten Falle möchte ich sogar genau diese 4 Zeilen durch meine eigenen ersetzen, was ohne ein direktes Editieren der Source-Files aber natürlich nicht möglich ist.

Also habe ich einen Subscriber auf genau das gleiche Event wie die ControllerBase registriert: Enlight_Controller_Action_PostDispatch. Leider jedoch kann ich die sCategories Variable der View-Klasse weder aufrufen, noch irgendwie ändern:

public static function getSubscribedEvents()
{
    return [
		'Enlight_Controller_Action_PostDispatch' => 'onPostDispatch';  
	];
}

public function onPostDispatch(Enlight_Event_EventArgs $args)
{

    $view = $args->getSubject()->View();

    var_dump($view->sCategories); // => NULL
    var_dump($view->sMainCategories); // => NULL

    $view->sCategories = [];
    $view->sMainCategories = [];

}

Habt ihr eine Idee, wie ich die entsprechenden Kategorien in der Sidebar anpassen kann?

Beste Grüße
Chris

Hallo Zusammen,

ich hätte die gleiche Frage. Die View-Variable sCategories und sMainCategories ist zum Zeitpunkt des Events Enlight_Controller_Action_PostDispatchSecure_Frontend nicht befüllt. Dagegen die z .B. die Variable sArticles ist schon befüllt.

Woran könnte das liegen? Wo ist der Unterschied zwischen der Variablen sCategories und sArticles?

Beste Grüße

Flo

Hallo @ffetech,
weil sCategories und sMainCategories würde hier befullt: shopware/Bootstrap.php at 5.5 · shopware/shopware · GitHub nach dem Event Enlight_Controller_Action_PostDispatch shopware/Bootstrap.php at 5.5 · shopware/shopware · GitHub und Enlight_Controller_Action_PostDispatchSecure_Frontend notifed bevor Enlight_Controller_Action_PostDispatch wie du kannst hier sehen: shopware/Action.php at 5.5 · shopware/shopware · GitHub deshalb du kannst nicht diese Variable finden beim Enlight_Controller_Action_PostDispatchSecure_Frontend also was du kannst machen ist, benutzen Enlight_Controller_Action_PostDispatch und mache das Position nach dem ControllerBase/Bootstrap.php subscribe Position. oder after hacken das sGetCategories funktion hier: shopware/Bootstrap.php at 5.5 · shopware/shopware · GitHub

1 „Gefällt mir“

Hallo @ffetech,

weil sCategories und sMainCategories würde hier befullt:
shopware/Bootstrap.php at 5.5 · shopware/shopware · GitHub

nach dem Event Enlight_Controller_Action_PostDispatch
shopware/Bootstrap.php at 5.5 · shopware/shopware · GitHub

und Enlight_Controller_Action_PostDispatchSecure_Frontend notifed bevor Enlight_Controller_Action_PostDispatch wie du kannst hier sehen:
shopware/Action.php at 5.5 · shopware/shopware · GitHub

deshalb du kannst nicht diese Variable finden beim Enlight_Controller_Action_PostDispatchSecure_Frontend

also was du kannst machen ist, benutzen Enlight_Controller_Action_PostDispatch und mache das Position nach dem ControllerBase/Bootstrap.php subscribe Position, oder after hacken das sGetCategories funktion hier:
shopware/Bootstrap.php at 5.5 · shopware/shopware · GitHub

VG,

Tel.: +49 755 - 183 990 00 | Web: http://enbit.de/

1 „Gefällt mir“

Hallo @ahmadsaad,

vielen, vielen, vielen Dank :slight_smile: So funktioniert es :slight_smile:

public static function getSubscribedEvents()
{
  return [
    'Enlight_Controller_Action_PostDispatch' => array('onPostDispatch', 101),
        ];

}

wenn man die Priorität auf 101 setzt, da die Priorität in Bootstrap.php auf 100 gesetzt ist.

public function install()
{
    $this->subscribeEvent(
       'Enlight_Controller_Action_PostDispatch',
       'onPostDispatch',
        100
   );
   return true;
}