Коллекция Magento удалить фильтр категории - PullRequest
1 голос
/ 01 февраля 2012

Я переписываю список продуктов в моем расширении, но когда я пишу коллекцию, он добавляет дополнительный фильтр категории, которая мне не нужна.

Вот мой код:

$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);

Вы можете видеть, что я не добавил проверку категории, но когда я распечатал запрос, я получил это:

    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'))

Здесь вы видите, что в запросе печатается cat_index.category_id='3', который мне не нужен. Мне нужно знать, что, как я могу удалить этот фильтр категории там?

1 Ответ

3 голосов
/ 01 февраля 2012

Фильтр категорий добавляется при использовании

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

Вместо этого удалите эту строку и замените ее на:

$collection->addAttributeToFilter('visibility', array('in' => array(Mage_Catalog_Model_Product_Visibility::VISIBILITY_IN_CATALOG, Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH) ));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...