今天,我一直在敲打不基于属性的分层导航选项。它用于收视率,因此前端可以显示出漂亮的闪亮星星。

为此,我有:

  1. 创建一个模块
  2. 重写catalog_block_layer_view

    <blocks>        
      <catalog>
        <rewrite>
          <layer_view>Bob_Catalog_Block_Layer_View</layer_view>
         </rewrite>                
       </catalog>
    </blocks>
    
  3. 创建一个名为bob_catalog_block_layer_view的类

  4. 创建的_initblocks(),getFilters()和_preparelayout()覆盖父类方法。这些都在某个时候调用父类,然后将额外的数据预先置于返回的数据。
  5. 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.
  6. 创建一个模型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() 而且也没有事件。

许可以下: CC-BY-SA归因
scroll top