如何根据产品类型及其属性值过滤产品集合?

时间:2013-11-08 01:09:44

标签: magento

让我们说在一个类别中我有简单的产品和虚拟产品。现在,对于登录和未登录的客户,我想过滤要在该类别下显示的产品。我没有登录和未登录条件的问题。问题在于收集过滤器。

假设我有虚拟产品的“filesize”属性。通过观察catalog_product_collection_load_before事件,我想过滤,以便未登录的客户可以看到所有简单的产品以及filesize = 1,2的虚拟产品(这意味着1MB和2MB,multiselect属性)。所有登录的客户都可以看到所有简单产品以及包含所有文件大小的虚拟产品。

我未登录客户的收集代码如下:

$observer->getCollection()->addAttributeToSelect('filesize','type_id')
    ->addAttributeToFilter('type_id', array('eq' => 'simple'))
    ->addAttributeToFilter('filesize', array('in' => array(1,2)));

但它不起作用。我怎样才能做到这一点?提前谢谢。

2 个答案:

答案 0 :(得分:1)

您可以这样使用:

$collection->addAttributeToSelect('filesize','type_id')
           ->addAttributeToFilter(array(array('attribute'=>'type_id','eq' => 'simple')))
           ->addAttributeToFilter(array(array('attribute'=>'filesize','in' => array(1,2))));

答案 1 :(得分:0)

看看@ Mage_Catalog_Model_Resource_Product_Collection

  

Mage :: dispatchEvent('catalog_product_collection_load_before',array('collection'=> $ this));

所以在你的观察者尝试

$collection->addAttributeToSelect('filesize','type_id')
           ->addAttributeToFilter('type_id', array('eq' => 'simple'))
           ->addAttributeToFilter('filesize', array('in' => array(1,2)));