tags:

views:

2412

answers:

2

Hi All

Does anyone know if there is a way to run a product collection through a category filter twice? I have a ‘featured’ category, which is hidden, that I add products to so they’re available to grab as featured products. Currently I'm getting my product collection like this:

$_productCollection = Mage::getResourceModel('reports/product_collection')
    ->addAttributeToSelect('*')
    ->addAttributeToFilter('visibility', $visibility)
    ->addCategoryFilter('36');
    $_productCollection->load();

This works fine on the homepage, but on the category pages, I need to filter the results by the current category first, and then by the featured category:

$_productCollection = Mage::getResourceModel('reports/product_collection')
    ->addAttributeToSelect('*')
    ->addAttributeToFilter('visibility', $visibility)
    ->addCategoryFilter('15')
    ->addCategoryFilter('36');
    $_productCollection->load();

Unfortunately, it seems you can’t perform 2 category filters without editing core files, which I don’t want to do.

Any ideas how to get around this?

I was thinking I could maybe grab 2 product collections separately, one filtered by current category, and one by featured category, then using PHP's stristr find the products residing in both and use those, like

  if (stristr($featProductCollection, $currProductCollection))

Anyone any ideas? I think I’d need to return maybe just the SKU’s of the products, maybe in a comma separated list. But I’m not sure of the best way to go about this, and it does seem a bit hacky.

A: 

What do your sql statements look like so I can get a better idea of how you have your DB setup?

Brandon G
Well a category is like this: INSERT INTO `catalog_category_entity` VALUES(36, 9, 12, 3, '2009-11-09 18:51:36', '2009-11-09 20:04:29', '1/3/36', 21, 2, 0);The first value is the category number (in this case 36).
Sam
+2  A: 

OK, actually sorted it myself with a bit of help from someone elsewhere:

    $_productCollection = Mage::getResourceModel('reports/product_collection')
    ->addAttributeToSelect('*')
    ->addAttributeToFilter('visibility', $visibility)
    ->addCategoryFilter($_category)
    ->addAttributeToFilter('category_ids',array('finset'=>'36'))
    $_productCollection->load();

Where $_category is the current category.

Sam