2012-04-20 35 views
1

我们有一个类别结构是这样的:

- 1类别
----类别1 - 1
---- ---类别1 - 1 - 1
-------类别1 - 1 - 2
----第1类 - 第2
- 2
----类别2 - 1
----类别2 - 2Magento的:点击一个类别时,所有子类别的显示产品,没有is_anchor

通常,当用户单击根类别时,它显示为空。此外,类别1和2是空的(错误地可能是,1或2个产品在那里)。

我想,当单击类别时,显示的所有子类别的产品(和子类别子类别)(+这是在该类别本身的产品)。

我们不能使用is_anchor,因为这种行为只对三个storeviews之一,is_anchor是全球

我的想法是重写Mage_Catalog_Block_Product_List,因此它在请求类别时返回子类别的产品,但是通过向所有类别收集请求添加一个过滤器或类似方法,没有更简单的方法吗?

类似问题的答案不完整或使用is_anchor。

+0

尝试重写'Mage_Catalog_Model_Category'并覆盖方法'getLayoutUpdateHandle()' - 将当前商店/网站检查添加到那里。没有尝试它,但看着'Mage_Catalog_CategoryController :: viewAction()'它可能工作。 – Zyava 2012-04-22 21:02:01

+0

我尝试了你的建议,但是这只会导致类别不再被输出。我将尝试继续重写'getProductCollection()' – SebiF 2012-04-23 14:47:44

回答

1

我现在自己解决了这个问题。

我创建了重写Mage_Catalog_Model_Category::getProductCollection()

的步骤如下模块:

  1. 如果没有子类别,返回标准parent::getProductCollection()
  2. 当有子类,让所有的孩子类别的ID并将它们保存为数组。
  3. 将当前类别的id添加到数组中。
  4. 获取所有这些类别的集合,并按is_active对其进行过滤。
  5. 遍历类别集合并加载每个类别。
  6. 获取每个类别的产品集合并遍历它,将所有产品id保存到一个数组中。当下一个类别被加载时追加到数组。
  7. 建立产品集合并添加一个过滤器->addAttributeToFilter('entity_id', array('in' => array_unique($result)));
  8. 返回集合。它根据需要包含所有子类别和当前类别产品的所有产品(并且它没有重复内容)。
相关问题