有没有人知道是否有办法通过类别过滤器两次运行产品集合?我有一个隐藏的“特色”类别,我添加了产品,因此它们可以作为特色产品获取。目前我正在收集这样的产品系列:
$_productCollection = Mage::getResourceModel('reports/product_collection')
->addAttributeToSelect('*')
->addAttributeToFilter('visibility', $visibility)
->addCategoryFilter('36');
$_productCollection->load();
这在主页上运行良好,但在类别页面上,我需要先按当前类别过滤结果,然后按特色类别过滤:
$_productCollection = Mage::getResourceModel('reports/product_collection')
->addAttributeToSelect('*')
->addAttributeToFilter('visibility', $visibility)
->addCategoryFilter('15')
->addCategoryFilter('36');
$_productCollection->load();
不幸的是,似乎你不能在不编辑核心文件的情况下执行2个类别的过滤器,我不想这样做。
任何想法如何解决这个问题?
我想我可以分别抓住2个产品系列,一个按当前类别过滤,一个按特色类别,然后使用PHP的 stristr 查找驻留在两者中的产品并使用它们,如< / p>
if (stristr($featProductCollection, $currProductCollection))
任何想法?我想我可能需要返回产品的SKU,可能是以逗号分隔的列表。但我不确定最好的方法,这似乎有点hacky。
答案 0 :(得分:6)
好的,实际上是在别人的帮助下自己整理了一下:
$_productCollection = Mage::getResourceModel('reports/product_collection')
->addAttributeToSelect('*')
->addAttributeToFilter('visibility', $visibility)
->addCategoryFilter($_category)
->addAttributeToFilter('category_ids',array('finset'=>'36'))
$_productCollection->load();
其中$ _category是当前类别。
答案 1 :(得分:0)
不确定原因,但这在1.4中不起作用,我的解决方案不是很漂亮但在大型数据库上运行良好:
$select = $collection->getSelect();
$select->where('(SELECT COUNT(1) FROM `catalog_category_product_index` AS `cat_index`
WHERE cat_index.product_id=e.entity_id AND cat_index.category_id
IN('.implode(',',$categories).') AND cat_index.store_id='.$collection->getStoreId().') >= '.count($categories));