2012-10-26 43 views
2

我試圖創建一些功能,允許我根據類別和屬性值等條件任意顯示產品集合,並按預期工作,但我也希望能夠排除某些類別我可以包含'默認分類',然後排除任何我不想要的子分類。似乎沒有像addCategoryFilter($ catid)這樣的方法。Magento - 如何從產品集合中排除類別?

我發現一個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)); 

有沒有其他人有過這樣的事情嗎?

回答

1

我不認爲有一種原生的方式來做到這一點。但是你可以很容易地擴展

Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection 

快速模塊,然後你可以創建自己的方法,並更改joinCondition,以適應

+0

我我一直試圖使用上面的代碼,如下所示:public function excludeCategory($ productCollection,$ catId){ \t if($ catId){ \t \t $ productCollection-> getSelect() - > join(array('cats'=>'catalog_category_product'),'cats.product_id = e.entity_id'); ('cats.category_id',array('neq'=> $ catId));其中('cats.category_id',數組('neq'=> $ catId)); \t} \t return $ productCollection; } 在/local/mage/catalog/block/product/whatsnew.php這是'類Mage_Catalog_Block_Product_Whatsnew擴展Mage_Catalog_Block_Product_Abstract'。 – gpcola

+0

正如我所說,當我嘗試使用該功能時,我的產品模塊消失,並且沒有創建錯誤日誌,以便爲我提供線索,看看爲什麼會發生這種情況 – gpcola

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