5

我试图在我的商店中添加一些过滤器,但它们有一个令人讨厌的副作用。

假设我有产品类型 A 和 B。现在我只想显示颜色 = 蓝色/红色的 A。

$collection = Mage::getResourceModel('catalog/product_collection')
    ->setStoreId($this->getStoreId())
    ->addCategoryFilter($this)
    ->addAttributeToFilter(array(
          array('attribute' => 'color', 'in' => array(4, 6)),
    )
    );

这可以解决问题,但是现在因为产品类型 B 没有分配给颜色的值(因为没有指定此属性),所以没有出现这种类型的产品。

我在论坛http://www.magentocommerce.com/boards/viewthread/178309上找到了这段代码,但它不起作用:

array('attribute' => 'color', 'is' => new Zend_Db_Expr('null'))

也没有:

array('attribute' => 'color', 'null' => true),

这实际上显示了具有分配属性但没有声明值的产品......

我还尝试添加:

array('attribute' => 'price', 'gteq' => 0), 

因为我认为这些语句与“或”相关联(根据文档),但即使这样也只会添加具有分配属性的产品类型......

请注意,这些值来自下拉列表,但不确定是否重要。

4

2 回答 2

8

也许为时已晚,但这对我有用:

$collection = Mage::getResourceModel('catalog/product_collection')
    ->setStoreId($this->getStoreId())
    ->addCategoryFilter($this)
    ->addAttributeToFilter(
        array(
            array('attribute' => 'color', 'null' => true),
            array('attribute' => 'color', 'in' => array(4, 6)),
        ),
        '',
        'left'
);
于 2012-10-27T13:22:41.973 回答
0

副手,试一试:

$collection = Mage::getResourceModel('catalog/product_collection')
    ->setStoreId($this->getStoreId())
    ->addCategoryFilter($this)
    ->addAttributeToFilter(array(array('attribute' => 'color', 'in' => array(4, 6)),'left')
);
于 2010-08-04T19:03:56.983 回答