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:
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?
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?
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