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