我正在尝试创建一些功能,允许我根据类别和属性值等条件任意显示产品集合,并使其按预期工作,但我也希望能够排除某些类别这样我就可以包含'默认类别',然后排除我不想要的任何子类别。似乎没有像addCategoryFilter($ catid)这样的方法。
我找到了similar question that had been answered,但无法让它为我工作。
$catId = 9;
/* I'm almost positive 'e' is the alias used for catalog_product_entity, check your
query with echo (string) $products->getSelect(); if it doesn't work */
$products->getSelect()->join(array('cats' => 'catalog_category_product'), 'cats.product_id = e.entity_id');
$products->getSelect()->where('cats.category_id', array('neq' => $catId));
还有其他人有过做这种事的经历吗?
答案 0 :(得分:1)
我认为没有一种本地的做法。但是你可以轻松制作一个扩展的快速模块
Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection
然后您可以创建自己的方法,并将 joinCondition 更改为适合
答案 1 :(得分:0)
检查我的解决方案:
$_productCollection = Mage::getModel('catalog/product')
->getCollection()
->addAttributeToSelect('*')
->addUrlRewrite();
Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($_productCollection);
Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($_productCollection);
$_productCollection->load();
$_productCollection->getSelect()->join(array('cats' => 'catalog_category_product'), 'cats.product_id = e.entity_id');
$_productCollection->getSelect()->where('cats.category_id not in (41)');