Magento: addAttributeToFilter, но игнорировать для продуктов, у которых нет этого атрибута? - PullRequest
4 голосов
/ 04 августа 2010

Я пытаюсь показать, добавить несколько фильтров в моем магазине, но они имеют неприятный побочный эффект.

Предположим, у меня есть продукты типа 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), 

Поскольку я полагал, что эти операторы были связаны с 'ИЛИ' (согласно документации), но дажеэто только добавляет типы продуктов, которым назначен атрибут ...

Обратите внимание, что эти значения взяты из выпадающего списка, хотя не уверен, что это имеет значение.

Ответы [ 2 ]

7 голосов
/ 27 октября 2012

Может быть, уже слишком поздно, но у меня это работает:

$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'
);
0 голосов
/ 04 августа 2010

От руки, дай этому выстрел:

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