1

我们有这样的类别结构:

-- 类别 1
---- 类别 1 - 1
------- 类别 1 - 1 - 1
------- 类别 1 - 1 - 2
--- - 类别 1 - 2
-- 类别 2
---- 类别 2 - 1
---- 类别 2 - 2

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

我希望,当单击一个类别时,会显示所有子类别(以及子类别的子类别)的产品(+ 属于该类别本身的产品)。

我们不能使用 is_anchor,因为这种行为仅适​​用于三个商店视图之一,并且 is_anchor 是全局的。

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

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

4

1 回答 1

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. 返回集合。它根据需要保存所有子类别的所有产品和当前类别的产品(并且其中没有重复项)。
于 2012-04-24T12:23:29.403 回答