Heute habe ich eine mehrschichtige Navigationsoption aufgerufen, die nicht auf einem Attribut basiert. Es ist für Bewertungen, damit das Frontend schöne glänzende Sterne zeigen kann.
Dazu habe ich:
- Modul erstellt
Katalog_block_layer_view neu geschrieben
<blocks> <catalog> <rewrite> <layer_view>Bob_Catalog_Block_Layer_View</layer_view> </rewrite> </catalog> </blocks>
Erstellt eine Klasse namens Bob_Catalog_Block_Layer_View, die Mage_Catalog_Block_Layer_View erweitert
- Erstellt _initBlocks (), getFilters () und _prepareLayout (), um die übergeordneten Klassenmethoden zu überschreiben. Diese alle rufen die übergeordnete Klasse irgendwann auf und stellen dann zusätzliche Daten entweder voran oder hängen sie an das zurück, was zurückgegeben wird.
- Erstellen Sie einen Filterblock Bob_Catalog_Block_Layer_Filter_Rating, der Mage_Catalog_Block_Layer_Filter_Abstract um einen Konstruktor erweitert, der den filterModelName festlegt und dessen übergeordnetes Element aufruft. Anschließend legt er eine benutzerdefinierte Vorlage fest, wie es scheint.
- Erstellen Sie ein Modell Bob_Catalog_Model_Layer_Filter_Rating, das Mage_Catalog_Model_Layer_Filter_Abstract erweitert und apply (), getName (), _getItemsData () implementiert.
Das alles funktioniert gut. Die schönen glänzenden Sterne zeigen sich im geschichteten Navi.
Ich habe das Gefühl, dass mir etwas fehlt, weil ich bei der Vorlage für den Ebenenstatus eine Bedingung einfügen musste, um den benutzerdefinierten Bewertungsfilter zu übernehmen und das Layout zu ändern. Auch einige der Dinge, die ich tun musste (Klonen der Produktkollektion, damit das Ladeereignis die Anzahl der Sammlungen bei der Paginierung nicht beeinträchtigt), geben mir das Gefühl, bergauf zu schwimmen.
Die Frage ist also, ob jemand von Ihnen bessere Vorschläge (oder vielleicht ein Augenzwinkern für einen Blog-Beitrag ) zum Erstellen eines benutzerdefinierten, nicht von Attributen unterstützten mehrschichtigen Navigationsfilters hat.
Danke fürs Lesen,
Si
quelle
Antworten:
Es gibt noch eine andere Möglichkeit: Sie können Ihrem Produkt ein normales Attribut hinzufügen, nämlich die Bewertung. Verwenden Sie dann einen Beobachter (ich weiß nicht, wie diese Bewertung gebildet wird), um das Produktattribut zu aktualisieren. Wenn ein Beobachter keine Option ist, verwenden Sie möglicherweise einen Cronjob, der dieses Attribut für jedes Produkt alle x Minuten aktualisiert, je nachdem, wie schwer das Skript ist.
Auf diese Weise ist kein Umschreiben und Ändern von Magento erforderlich, alle Navigationsmodule funktionieren weiterhin und die Wartung ist einfacher.
Die Frage ist natürlich, ist dies eine Option für Sie? Woher kommen die Bewertungen?
BEARBEITEN Sie müssten die Sterne mit Javascript formatieren oder den Attributnamen in der Vorlage überprüfen.
quelle
Ich habe mich in den Code vertieft und kein Ereignis gefunden. Ohne zusätzliche Attribute gibt es nichts zu tun
<rewrite>
Sie müssen Ihren Block
\Mage_Catalog_Block_Layer_View::_prepareLayout()
vor dem hinzufügenapply()
(wenn nicht, könnten Sie verwendencore_block_abstract_prepare_layout_after
.Und Sie müssen es hinzufügen
\Mage_Catalog_Block_Layer_View::getFilters()
und es gibt auch kein Ereignis.quelle
catalog/layer_filter_category
,catalog/layer_filter_attribute
undcatalog_resource/layer_filter_attribute
um die Optionen die ganze Zeit zu zeigen, ohne diestate.phtml
zu verwenden, gibt es im Moment keine Möglichkeit, die Filter zu entfernen: - /