Magento - 如何使用2类过滤器过滤产品系列?

时间:2009-11-12 21:02:14

标签: magento

有没有人知道是否有办法通过类别过滤器两次运行产品集合?我有一个隐藏的“特色”类别,我添加了产品,因此它们可以作为特色产品获取。目前我正在收集这样的产品系列:

$_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。

2 个答案:

答案 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));