1

假设在一个类别中,我有简单的产品和虚拟产品。现在,对于已登录和未登录的客户,我想过滤要在该类别下显示的产品。我对已登录和未登录的情况没有任何问题。问题出在收集过滤器上。

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

我的未登录客户的收集代码是这样的:

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

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

4

2 回答 2

1

你可以这样使用:

$collection->addAttributeToSelect('filesize','type_id')
           ->addAttributeToFilter(array(array('attribute'=>'type_id','eq' => 'simple')))
           ->addAttributeToFilter(array(array('attribute'=>'filesize','in' => array(1,2))));
于 2014-12-02T12:02:00.833 回答
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)));
于 2013-11-08T02:29:30.720 回答