Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Magento - How to filter a product collection using 2 category filters?

Tags:

magento

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.

like image 706
Marlon Creative Avatar asked Nov 12 '09 21:11

Marlon Creative


People also ask

How do I keep all filters visible in Magento 2 layered navigation?

The Catalog Input Type for Store Owner property of each attribute must be set to “Dropdown,” “Multiple Select,” or “Price.” To make the attributes filterable, the Use in Layered Navigation property of each must be set to either “Filterable (with results)” or “Filterable (no results).”


1 Answers

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.

like image 129
Marlon Creative Avatar answered Oct 04 '22 02:10

Marlon Creative