Guten Tag liebe Gemeinschaft, das ist also mein erster Post hier. Ich möchte zu Anfang erwähnen, dass ich relativ neu in der Welt von Shopware bin und nach ersterem rumstöbern sehr positiv überrascht bin, wie gut die Community hier zusammenspielt. Jetzt mal zu dem “kleinen” Problem, das ich derzeit habe: Ich würde für den Shop, an dem ich zur Zeit arbeite, gerne einen festen, rotierenden Banner einfügen. Ich hatte hier schon nach der Problematik gestöbert und dadurch u.a. die Problematik mit dem Mehrfach-Banner gelöst. Für meine Startseite läuft also alles nach Wunsch, was bedeutet ein NIVO-Slider zeigt rotierend alle Einträge, die man im Backend als Banner hinterlegt hat. Leider wird standardgemäß nur im Controller für den Index und im Listing die Banner-Liste geladen. Ich könnte nun natürlich beigehen und in jedem Controller die paar Zeilen zum Laden der Banner-Liste übergeben, aber diese Lösung finde ich persönlich unzufriedenstellend. Ich würde daher euch gerne um Rat bitten, ob jemand eine bessere Lösung kennt, um die Daten für die Banner-Liste zu laden. Gedacht hatte ich da bsw. an ein Box-Element, das wahlweise einen eigenen Controller hat oder den aktuellen Controller mitnutzen kann, um die View mit den nötigen Daten ($sBanner) zu füttern. Natürlich müsste dieses Element dann automatisch für jeden Seitenaufruf geladen werden. Ich hoffe ihr versteht mein Problem und könnt mich dabei ein wenig erleuchten Schöne Grüße aus dem schönen Ostfriesland, Simon EDIT: Ich habe den Titel jetzt abgeändert, damit man hier nicht vergeblich nach Antworten auf andere Fragen sucht. Das Problem wurde mittlerweile über Events (mittels Plugin) gelöst, dass ermöglicht bestimmte Informationen (hier der sBanner) in der View für das gesamten Frontend einheitlich festzulegen.
Hallo Scialicious, reicht es nicht, wenn du einfach die nötigen Daten überall im Frontend zur Verfügung stehen hast? Dann reicht nämlich ein generelles PostDispatch-Event. Dort musst du nur abfragen, ob du dich im Frontend befindest. So sähe ein Beispiel dazu aus: Die Install-Methode: public function install() { $this-\>subscribeEvent( 'Enlight\_Controller\_Action\_PostDispatch', 'onPostDispatch' ); }
Und die Funktion dazu: public function onPostDispatch(Enlight\_Event\_EventArgs $args) { $view = $args-\>getSubject()-\>View(); $request = $args-\>getSubject()-\>Request(); if(!$view-\>hasTemplate() || $request-\>getModuleName() != 'frontend'){ return; } [...] $view-\>sBanner = $deineVariableMitDenInformationen; }
Du installierst also ein Event, das prinzipiell überall gezündet wird. Dann prüfst du ab, ob du dich im Frontend befindest und ob die View ein Template hat(andernsfalls könnte es zu Fehlern kommen). Anschließend besorgst du dir die notwendigen Daten und lädst sie in die View. Hilft dir das bereits? Gruß, Patrick :shopware:
Recht herzlichen Dank, Patrick! Das war top. Genau das was ich gesucht habe. Habe wie gesagt noch nicht viel Erfahrung gesammelt mit Shopware/Enlight, da fehlte mir grad einfach das Wissen über Plugins, Events und Hooks. Gerad mal angeschaut und bin überrascht wie leicht das hier alles funktioniert. Danke nochmals, du hast mich da erleuchten können. Ich wusste auf die Community kann man zählen