Zusammenfassung
Ich habe ein Problem, bei dem ein Magento Store, an dem ich arbeite, so konfiguriert wurde, dass gruppierte Produkte mit zugehörigen einfachen Produkten verwendet werden. Diese Produkte können nach den im Administrator konfigurierten Produktattributen / -werten gefiltert werden.
Aktuelles Verhalten
- Die Sichtbarkeit der einfachen Produkte ist auf Nicht einzeln sichtbar eingestellt .
- Die einfachen Produkte werden bei der Suche nach ihrem Gruppenprodukt angezeigt .
Wenn die Endbenutzer die Produkte Ergebnisse durch Filter Farbe und zum Beispiel rot , die gruppierten Produkte mit einfachen zugehörigen Produkten , die einen Attributwert für haben Farbe von rot angezeigt.
Erwartetes Verhalten (nach Anpassung)
- Die Sichtbarkeit der einfachen Produkte ist auf Nicht einzeln sichtbar eingestellt .
- Die einfachen Produkte werden bei der Suche nach ihrem Gruppenprodukt angezeigt .
Wenn der Endbenutzer die Produktergebnisse (nur) nach Farbe filtert , sollte anstelle der angezeigten gruppierten Produkte dieses einfache Produkt angezeigt werden.
Meine Logik war - ich konnte die Filter anhand der Anforderungsparameter erkennen. Wenn der Farbfilter eingestellt wurde, überschreibe ich die Produktergebnisse irgendwie .
Wenn ich irgendwie sage, was ich meine, ist dies der Teil, in dem ich Probleme habe, mein einfaches Problem zu lösen. Wie kann ich dieses Problem lösen?
Schlussfolgerung / Versuche
Unten finden Sie eine Liste der Versuche, an die ich gedacht und mit denen ich herumgespielt habe, um festzustellen, dass sie mein Problem nicht vollständig oder einfach überhaupt nicht lösen.
Beachten Sie catalog_controller_category_init_before
:
Ich dachte, wenn ich die _initCategory()
Methode beobachte , könnte ich das Layout überschreiben, indem ich möglicherweise die Magento-Konfiguration ändern könnte, um einfache Produkte und keine gruppierten Produkte anzuzeigen.
Es scheint $this->loadLayout()
jedoch nie aufgerufen zu werden, daher muss ich die getLayout
oder viewAction
Methoden auf sich CategoryController
selbst überschreiben .
Überschreiben Sie den CategoryController explizit, um Layoutänderungen zu implementieren:
Ich habe das oben Gesagte rückgängig gemacht und mich entschlossen, meine zweite Option zum Überschreiben der Funktionalität fortzusetzen. Beginnen Sie mit der Erweiterung des Mage_Catalog_CategoryController
Controllers.
Mein erster Versuch war, das zu überschreiben loadLayout
. Nachdem ich erfahren hatte, dass dies nie genannt wird, entschied ich mich, das zu überschreiben. Zu getLayout
diesem Zeitpunkt war ich mir nicht sicher, was ich tun würde.
Überschreiben Sie die Mage_Catalog_Block_Product_List
:
Ich entschied, dass die bessere Option darin bestand, den eigentlichen Block zu erweitern, der die erforderlichen Modelle und Sammlungen enthält. Innerhalb meines Blocks überschreibe ich die getProductsListHtml
Methode, ich erfahre schnell, dass der gesamte HTML-Code bereits analysiert, ausgeführt und generiert wurde.
Also konnte ich nicht einfach.
- Hören Sie auf die
$this->getRequest()->getParams()
; - Durchlaufen Sie die gruppierten Produkte, um die zugehörigen Produkte zu erhalten, die meinem Filter entsprechen.
Beobachten Sie das catalog_product_collection_load_after
Ereignis:
Dieses Mal dachte ich, ich könnte die Modellsammlung beobachten und die Suche ändern, um die Ergebnisse zu ändern, wenn meine Filter eingestellt wurden. Wobei ich $observer->getEvent()->getCollection()
die Abfrage basierend auf meinen Filtern erhalte und aktualisiere.
Dies funktioniert nicht, da ich die gruppierten Produkte entfernen kann, die einfachen Produkte jedoch aufgrund der Sichtbarkeit nicht angezeigt werden.