自定义基于非属性的分层导航。这是唯一的方法吗?
-
16-10-2019 - |
题
今天,我一直在敲打不基于属性的分层导航选项。它用于收视率,因此前端可以显示出漂亮的闪亮星星。
为此,我有:
- 创建一个模块
重写catalog_block_layer_view
<blocks> <catalog> <rewrite> <layer_view>Bob_Catalog_Block_Layer_View</layer_view> </rewrite> </catalog> </blocks>
创建一个名为bob_catalog_block_layer_view的类
- 创建的_initblocks(),getFilters()和_preparelayout()覆盖父类方法。这些都在某个时候调用父类,然后将额外的数据预先置于返回的数据。
- Create a filter block Bob_Catalog_Block_Layer_Filter_Rating which extends Mage_Catalog_Block_Layer_Filter_Abstract with a constructor that sets the filterModelName and calls its parent and then sets a custom template as it seems Mage_Catalog_Block_Layer_Filter_Abstract has the template name hardcoded in its constructor.
- 创建一个模型bob_catalog_model_layer_filter_rating,该范围扩展了mage_catalog_model_layer_filter_abstract并实现apply(),getName(),_getItemsdata()。
这一切都很好。漂亮的闪亮星星在分层的导航中显示。
我有一种直觉的感觉,我缺少某些东西,因为在层状态模板方面,我不得不在其中放置一个条件来拾取自定义评级过滤器并更改布局。另外,我需要做的一些事情(克隆产品集合,以使负载事件不会搞砸在分页上)让我觉得自己一直在山上游泳。
因此,问题是你们中的任何人都有任何更好的建议(或者也许是博客文章 眨眼)如何构建自定义的非属性背层导航过滤器?
谢谢阅读,
si
解决方案
还有另一种方法,您可以在产品中添加正常属性,这将是评级。然后使用观察者(我不知道如何形成此评级)来更新产品的属性。或者,如果观察者没有选项,也许使用cronjob,该cronjob每x分钟都会根据脚本的重量来更新每个产品。
这样,就不会有Magento重写和更改所涉及的,所有导航模块仍然可以正常工作,并且更容易维护。
当然,问题是,这是您的选择吗?评分从何而来?
编辑 您必须使用JavaScript样式,或检查模板中的属性名称。
其他提示
我挖掘了代码,没有发现任何事件。没有添加额外的属性,就没有什么可以没有的 <rewrite>
您必须添加您的块 \Mage_Catalog_Block_Layer_View::_prepareLayout()
之前 apply()
(如果没有,您可以使用 core_block_abstract_prepare_layout_after
.
而且您需要将其添加到 \Mage_Catalog_Block_Layer_View::getFilters()
而且也没有事件。