Исключать категорию при отображении коллекции продуктов
Я показываю самые популярные товары и хочу иметь возможность исключить некоторые товары из показа.
Я подумал, что лучшим способом было бы исключить категорию, и когда я хочу исключить продукт, я могу поместить его в категорию исключения.
Мне нужно, чтобы это работало, даже если продукт относится к другой категории.
Я показываю самые популярные продукты с этим:
$storeId2 = Mage::app()->getStore()->getId();
$products2 = Mage::getResourceModel('reports/product_collection')
->addOrderedQty()
->addAttributeToSelect('*')
->addAttributeToSelect(array('name', 'price', 'small_image'))
->setStoreId($storeId2)
->addStoreFilter($storeId2)
->setOrder('ordered_qty', 'desc');
Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($products2);
Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($products2);
$x = 1;
foreach($products2 as $prod2){
$inventory2 = Mage::getModel('cataloginventory/stock_item')->loadByProduct($prod2);
$actual_stock3 = (int)$inventory2->getQty();
if ($actual_stock3<1){
echo $prod2->getName() . ' - ' . $actual_stock3 . ' - ' . number_format($prod2->getData('ordered_qty'), 0) . '</br>';
if ($x++ == 10) break;
}
}
Как мне исключить все продукты, скажем, в категории 151, даже если продукт находится в другой категории?
1 answers
Вы можете присоединиться к таблице catalog_category_product, чтобы сопоставить товары в вашей "категории исключения", а затем отфильтровать свою коллекцию, чтобы возвращать только товары с без совпадений в объединенной таблице:
Это должно сработать, учитывая категорию "исключить" как $excludeId
:
$products2->joinTable(
['exclude_category' => 'catalog/category_product'],
'product_id=entity_id',
['category_id'],
['category_id' => $excludeId],
'left'
);
$products2->getSelect()->where(new Zend_Db_Expr('exclude_category.category_id IS NULL'));
Обновление
Я вижу, вы уже присоединяетесь к индексу категории с помощью addVisibleInCatalogFilterToCollection()
, что приводит к дублированию столбца "category_id". Я обновил код, чтобы использовать псевдоним для объединенной таблицы, exclude_category
.