分层导航 - 按其他类别过滤

时间:2012-10-17 15:29:12

标签: php magento e-commerce magento-1.7

使用分层导航,如何让客户根据产品所在的其他类别过滤产品?

我正在一家服装店工作,产品分类如下:

  • 上衣
    • T恤
    • 礼服衬衫
  • 下装
    • 牛仔裤
    • 短裤
  • 游泳衣
  • 外套
  • 配件
    • 皮带
    • 扎带

我们想添加特别收藏品,例如“冬季系列”或“采访服装”。这些特殊类别属于单独的根类别(并且属性设置为特殊值,因此我们可以区分正常类别和这些特殊类别)。其中的所有产品也将分配到主要类别。

如果用户正在浏览冬季系列,他们应该能够根据这些主要类别进行过滤。如果冬季系列和外套类别中有夹克,我们应该将外套作为过滤选项。只应出现相关类别;例如,我们不会在冬季系列中穿泳衣,因此不应出现泳装类别。

我们的想法是,我们不想为每个集合复制那些主要类别 - 我们已经知道它是什么类型的服装(基于类别),所以我们的集合应该意识到这一点。

如何做到这一点?

2 个答案:

答案 0 :(得分:1)

一个冗长的解决方案是创建一个新属性作为多选,并用所有类别填充它。然后,您必须浏览每个产品并选择适用的所有“类别”。

这种方法的问题在于,在过滤器中,类别将显示为平面列表,而不是树结构,例如:

Example category filter

我认为会比这更糟糕。我认为过滤器按字母顺序自动排序?

可能有一个插件可以完成您的工作。

答案 1 :(得分:1)

我能够找到一个可行的解决方案。我在这里发帖,以防其他人有类似的问题。

唯一的缺点是:

  • 这些类别不会以树形结构显示(尚未 - 正在进行此项工作)
  • 单击以删除类别过滤器会像往常一样备份类别树,除非它一直到根目录,这是不可接受的。我的解决方法是让X图标完全删除过滤器,而不是转到父类别。

详情

第一步是向名为“special_type”的类别添加新属性。此下拉列表允许管理员选择该类别是作为核心类别(根据我的项目符号列表)还是作为特殊“集合”。

下一步是覆盖Mage_Catalog_Model_Layer_Filter_Category :: _ getItemsData()中的功能,其中填充了$categories。如果$this->getLayer()->getCurrentCategory()->getSpecialType() ==为默认类型,则调用原始方法(return parent::_getItemsData())。否则...

我将$this->getLayer()->getProductCollection()传递给自定义方法,该方法确定出现哪些标准类别。我在查询中使用以下过滤器:

  • 排除非标准类别
  • 排除当前已过滤的类别
  • 仅显示可能的最高级别类别

最后两个基本上允许这个功能:如果我目前正在过滤Tops,只显示Tops的子类别而不是其他内容。

自定义方法返回符合我的条件的类别集合,并分配给$categories。该方法的其余部分保持不变。

希望这有助于处于类似情况的人。