Hanan Ali
Hanan Ali

Reputation: 102

Magento Collection remove category filter

I am over writing the product list in my extension but when I write the collection it add extra filter of category that i dont need.

Here is my code:

$collection = Mage::getResourceModel('catalog/product_collection');
$attributes = Mage::getSingleton('catalog/config')->getProductAttributes();
$collection->addAttributeToSelect($attributes)
           ->addMinimalPrice()
           ->addFinalPrice()
           ->addTaxPercents()
           ->addStoreFilter();

$collection->addIdFilter($result);
Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($collection);
Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($collection);
$collection->printlogquery(true);

You can see i did not add any category filter check but when i print the query i got this:

    SELECT `e`.*, `price_index`.`price`, `price_index`.`tax_class_id`,
           `price_index`.`final_price`, IF(`price_index`.`tier_price`,
           LEAST(`price_index`.`min_price`, `price_index`.`tier_price`),
           `price_index`.`min_price`) AS `minimal_price`,
           `price_index`.`min_price`, `price_index`.`max_price`, 
           `price_index`.`tier_price`,
           `cat_index`.`position` AS `cat_index_position`
      FROM `mage_catalog_product_entity` AS `e`
INNER JOIN `mage_catalog_product_index_price` AS `price_index`
        ON price_index.entity_id = e.entity_id
       AND price_index.website_id = '1'
       AND price_index.customer_group_id = 0
INNER JOIN `mage_catalog_category_product_index` AS `cat_index`
        ON cat_index.product_id=e.entity_id
       AND cat_index.store_id='1'
       AND cat_index.visibility IN(2, 4)
       AND cat_index.category_id='3'
     WHERE (e.entity_id in ('724', '729', '733', '737', '741', '745', '749', '755',
                            '759', '766', '770', '775', '780', '785', '920', '921',
                            '923', '927', '957', '958', '959', '960', '961', '962',
                            '963', '964', '965', '966', '967', '1146', '1147', '1185', 
                            '1186', '1187', '1188', '1189', '1190', '1191', '1192', 
                            '1193', '1194', '1195', '1196', '1274', '1275', '1276', 
                            '1277', '1278', '1279', '1280', '1281', '1282', '1283', 
                            '1284', '1285', '1286', '1287', '1288', '1289', '1290', 
                            '1291', '1292', '1293', '1294', '1295', '1310', '1311', 
                            '1312', '1313', '1314', '1315'))

Here you see that in query it is printing the cat_index.category_id='3' which i dont need. I need to know that how can i remove this category filter there?

Upvotes: 2

Views: 3866

Answers (1)

Mike Potter
Mike Potter

Reputation: 328

The category filter is added when you use

Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($collection);

Instead, remove that line, and replace it with:

$collection->addAttributeToFilter('visibility', array('in' => array(Mage_Catalog_Model_Product_Visibility::VISIBILITY_IN_CATALOG, Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH) ));

Upvotes: 4

Related Questions