自定义基于非属性的分层导航。这是唯一的方法吗?


8

今天,我已经提出了一个不基于属性的分层导航选项。它用于评级,因此前端可以显示漂亮的闪亮星星。

为此,我有:

  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的类,该类扩展了Mage_Catalog_Block_Layer_View

  4. 创建了_initBlocks(),getFilters()和_prepareLayout()来覆盖父类方法。这些都在某个时刻调用父类,然后在返回的数据之前添加或附加额外的数据。
  5. 创建一个过滤器块Bob_Catalog_Block_Layer_Filter_Rating,它使用构造函数扩展Mage_Catalog_Block_Layer_Filter_Abstract,该构造函数设置filterModelName并调用其父对象,然后设置一个自定义模板,因为Mage_Catalog_Block_Layer_Filter_Abstract似乎在其构造函数中硬编码了模板名称。
  6. 创建一个模型Bob_Catalog_Model_Layer_Filter_Rating,该模型扩展了Mage_Catalog_Model_Layer_Filter_Abstract并实现了apply(),getName(),_ getItemsData()。

这一切都很好。分层导航中显示出漂亮的闪亮星星。

我有种直觉,我想念一些东西,因为当涉及到图层状态模板时,我必须在其中放置一个条件来拾取自定义评分过滤器并更改布局。另外,我需要做的一些事情(克隆产品集合,以便装入事件不会增加分页中的集合数量)使我感到自己一直在爬山。

因此,问题是,关于如何构建自定义的非属性支持的分层导航过滤器,您有任何更好的建议(或者是博客文章wink)吗?

谢谢阅读,


第二天我必须要做,我想这样做。
Fabian Blechschmidt

Answers:


5

还有另一种方法,您可以为产品添加一个普通属性,即等级。然后使用观察者(我不知道该评分的形成方式)来更新产品的属性。或者,如果没有观察员的选择,则可以使用cronjob,它每隔x分钟更新一次每个产品的属性,具体取决于脚本的强度。

这样,无需进行Magento重写和更改,所有导航模块仍将正常工作,并且更易于维护。

当然,问题是,这是否适合您?评级来自哪里?

编辑您将不得不使用javascript设置星星的样式或检查模板中的属性名称。


我认为这几乎涵盖了所有选项。观察者的建议是一个有趣的想法。
2013年

如果我还记得,标准的星形样式只是基于CSS宽度(基于5分中的平均评分)。1/ 5 = 20%宽度,4.3 / 5 = 86%宽度等。我怀疑是否需要更改...但是通过cron脚本更新属性值非常聪明。+1
pspahn

2

我深入研究代码,未发现任何事件。如果不添加额外的属性,那么没有什么可以做的<rewrite>

您必须在\Mage_Catalog_Block_Layer_View::_prepareLayout()之前添加块apply()(如果不能,则可以使用core_block_abstract_prepare_layout_after。)

而且您需要将其添加到其中\Mage_Catalog_Block_Layer_View::getFilters(),也没有任何事件。


这正是我发现的。似乎也没有办法解决state.phtml模板。似乎需要条件分支才能更改任何输出。
2013年

我重写catalog/layer_filter_categorycatalog/layer_filter_attribute并且catalog_resource/layer_filter_attribute始终显示选项而无需使用state.phtml,目前无法删除过滤器:-/
Fabian Blechschmidt

我的工作中有一个if($ _filter-> getName()==='whatever'){}来显示自定义状态html。它不是一个很好的解决方案,但仍然是一个解决方案。附言 希望您自从我们上次在MDP见面以来一切都很好。
2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.