如何在Magento 2中按价格、颜色、制造商属性程序化筛选商品及分类商品
嘿,针对你的两个Magento 2商品筛选需求,我来给你一步步拆解解决方案,都是实战中常用的方法:
一、编程方式按price、color、manufacturer筛选商品
如果是要在自定义模块里通过代码获取符合条件的商品集合,我们可以借助Magento的产品集合工厂来实现,直接上可复用的代码示例:
<?php namespace Your\CustomModule\Model; use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory; use Magento\Catalog\Model\Product\Attribute\Source\Status; use Magento\Catalog\Model\Product\Visibility; class FilteredProductLoader { protected $productCollectionFactory; // 通过依赖注入获取集合工厂实例 public function __construct(CollectionFactory $productCollectionFactory) { $this->productCollectionFactory = $productCollectionFactory; } public function getMatchingProducts() { // 初始化产品集合 $productCollection = $this->productCollectionFactory->create(); // 基础配置:只加载启用且前端可见的商品 $productCollection->addAttributeToSelect('*') ->addAttributeToFilter('status', ['eq' => Status::STATUS_ENABLED]) ->setVisibility([Visibility::VISIBILITY_BOTH, Visibility::VISIBILITY_IN_CATALOG]); // 1. 价格筛选:示例筛选100-500元区间的商品 $productCollection->addAttributeToFilter('price', ['gteq' => 100, 'lteq' => 500]); // 2. 颜色筛选:注意这里要填颜色属性的Option ID(比如红色的ID是5) // 不知道Option ID的话,可以通过属性仓库获取:$colorAttr = $this->attrRepo->get('color'); 再遍历选项 $productCollection->addAttributeToFilter('color', ['eq' => 5]); // 3. 制造商筛选:同样填制造商属性的Option ID(比如Apple的ID是3) $productCollection->addAttributeToFilter('manufacturer', ['eq' => 3]); // 加载集合并返回 $productCollection->load(); return $productCollection; } }
补充说明:
- 如果需要筛选多个颜色/制造商,把条件改成
['in' => [5,6,7]]即可 - 价格支持单一条件,比如
['gt' => 200](大于200元)或['lt' => 1000](小于1000元) - 记得在模块的
di.xml里配置依赖注入,或者直接在控制器/Block里注入CollectionFactory
二、商品分类页面按颜色、制造商、价格筛选(层导航配置)
这个需求用Magento默认的层导航功能就能实现,不需要写太多代码,主要是后台配置:
设置属性为可筛选
- 登录后台,进入
Stores > Attributes > Product - 分别找到
color、manufacturer、price三个属性:- 编辑属性时,切换到
Storefront Properties标签,把Use in Layered Navigation设为Filterable (with results),Use in Search Results Layered Navigation也可以设为Yes - 价格属性默认已支持筛选,你可以额外配置
Price Step Configuration来调整价格区间的步长
- 编辑属性时,切换到
- 登录后台,进入
开启分类的锚点属性
- 进入
Catalog > Categories,找到需要添加筛选的分类 - 在
Display Settings标签下,把Anchor设为Yes(只有锚点分类才会显示层导航筛选) - 保存分类设置
- 进入
验证效果
- 清理后台缓存(
System > Cache Management) - 前端访问该分类页面,左侧就会出现颜色、制造商、价格的筛选栏了
- 清理后台缓存(
如果需要自定义筛选的样式或逻辑(比如修改价格区间计算),可以重写Magento\Catalog\Model\Layer\Filter\Price类,但大部分基础需求默认配置就能满足。
内容的提问来源于stack exchange,提问作者christy
相关产品推荐
相关产品推荐

