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), 

これらのステートメントは「OR」で接続されていると考えたので(ドキュメントによると)、それでも属性が割り当てられた製品タイプのみを追加します...

これらの値はドロップダウン リストから取得されることに注意してください。ただし、それが重要かどうかはわかりません。

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 に答える