0

複数のカテゴリをフィルタリングできるように addCategoryFilter メソッドを操作する回避策はありますか? 以下のコードで試してみましたが、うまくいきませんでした。

class ModuleName_Catalog_Model_Resource_Eav_Mysql4_Product_Collection
extends Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection{

public function addCategoriesFilter($categories){

$alias = 'cat_index';
$categoryCondition = $this->getConnection()->quoteInto(
$alias.'.product_id=e.entity_id AND '.$alias.'.store_id=? AND ',
$this->getStoreId()
);

$categoryCondition.= $alias.'.category_id IN ('.$categories.')';

$this->getSelect()->joinInner(
array($alias => $this->getTable('catalog/category_product_index')),
$categoryCondition,
array('position'=>'position')
);

$this->_categoryIndexJoined = true;
$this->_joinFields['position'] = array('table'=>$alias, 'field'=>'position' );

return $this;

}
}

また、以下のコードを試しましたが、どちらも機能しませんでした。

->addAttributeToFilter('category_ids',array('finset'=>'3','finset'=>'4'))
4

1 に答える 1

0

次のコードを拡張コレクション メソッドに挿入することができます (ここで$collectionになります$this)。または、$collection以前に製品コレクションとして定義された別の場所で使用できます。

$catIds = array('3', '4');
$tableAlias = 'cat_prod_idx';
$connection = $collection->getResource()->getReadConnection();
$conditions = array(
    "{$tableAlias}.product_id = e.entity_id",
    $connection->quoteInto("{$tableAlias}.store_id = ?", $collection->getStoreId()),
    $connection->quoteInto("{$tableAlias}.category_id in (?)", $filters)
);
$collection->getSelect()
    ->group('e.entity_id')
    ->join(
        array($tableAlias => $collection->getTable('catalog/category_product_index')),
        join(' AND ', $conditions),
        array()
    );
于 2012-10-04T16:35:10.117 に答える