Hallo zusammen, ich beschäftige mich erst seit Shopware 4 mit diesem System und möchte es gerne für einen Shop einsetzen. Nun habe ich eine Problemstellung und eine Lösung und würde gerne die Community fragen, ob das eine sinnvolle Lösung ist, ob es bessere gibt oder ob ich gar eine Funktion übersehen habe. Problem: Ich hätte gerne die Möglichkeit die Eigenschaften eines Produkts schon in der Listendarstellung anzuzeigen. Konkret geht es um Jahrgänge und Reben für Weine. Diese sollen als Eigenschaften und nicht (nur) als Kategorien vorhanden sein. In der Listendarstellung soll also stehen können: “2009 Riesling” und darunter dann der eigentliche Name des Weines. Ich nutze für die Listendarstellung die Funktion sGetArticlesByCategory. Meine Lösung: Da sGetArticlesByCategory keine Produkteigenschaften mitliefert habe ich einen Hook geschrieben, welche durch das array looped und für jeden Artikel nochmal ein getArticleById durchführt und dann damit die Stelle im array überschreibt. So habe ich dann quasi das selbe Array, welches auch sGetArticlesByCategory zurückliefert - nur mit vollständigen Artikeldetails. Allerdings ist diese Vorgehensweise hinsichtlich Performance sicher suboptimal. Hook-Code (man erkennt, es ist aus einem Beispiel abgeleitet): class Shopware\_Plugins\_Frontend\_myHook\_Bootstrap extends Shopware\_Components\_Plugin\_Bootstrap { public function install() { $this-\>subscribeEvent( 'sArticles::sGetArticlesByCategory::after', 'onArticle', 0 ); return true; } function onArticle(Enlight\_Hook\_HookArgs $args) { $result = $args-\>getReturn(); foreach ($result['sArticles'] as $article){ $fullArticle = $args-\>getSubject()-\>sGetArticleById($article['articleID']); $result['sArticles'][$article['articleID']] = $fullArticle; } $args-\>setReturn($result); } }
Welche clevereren Lösungen hat es für mein Problem? Habe ich eine eingebaute Systemfunktion übersehen? Oder ist das gar nicht so unperformant wie ich meine? Danke für Eure Einschätzung!
Hallo, ich weiß der Beitrag ist schon 3 Jahre alt - trotzdem stand ich gerade vor dem gleichen Problem - Dein Beitrag hat mir geholfen und ich wollte das nur kommentieren. :happy: Ich kenne keine andere Lösung als über ein Plugin (und imho gibt es aktuell auch keine On-Board-Lösung). Allerdings würde ich bzgl. der Performance auf sGetArticleProperties statt auf sGetArticleById zurückgreifen wenn es tatsächlich nur um die Eigenschaften geht. Das erscheint mir etwas weniger Overhead zu erzeugen. vg tonzen
Statt einen Hook zu nutzen sollte man sich besser auf das Event „Shopware_Modules_Articles_sGetArticlesByCategory_FilterResult“ subscriben.