2

我正在尝试创建一些功能,允许我根据类别和属性值等标准任意显示产品集合并使其按预期工作,但是我也希望能够排除某些类别,以便我然后可以包括“默认类别”,然后排除我不想要的任何子类别。似乎没有像 addCategoryFilter($catid) 这样的方法。

我发现了一个已经回答但无法为我工作的类似问题。

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

有没有其他人有过做这种事情的经验?

4

2 回答 2

1

我不认为有一种本地的方式来做到这一点。但是您可以轻松地制作一个快速扩展的模块

Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection

然后您可以创建自己的方法,并更改joinCondition以适应

于 2012-10-26T15:56:44.523 回答
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)');
于 2015-03-18T18:21:34.897 回答