2

Adminhtml にカスタム グリッドがあります。

protected function _prepareCollection()
{
    /* @var $collection Mage_Catalog_Model_Resource_Product_Collection */
    $collection = Mage::getModel('catalog/product')->getCollection();
    $collection->addAttributeToSelect('*');
    $collection->joinField('category_id', 'catalog/category_product', 'category_id', 'product_id=entity_id', null, 'left');
    $collection->groupByAttribute('entity_id');
    $collection->addStaticField('category_id');
    $collection->addExpressionAttributeToSelect('category_grp', 'GROUP_CONCAT(category_id)', 'category_id');

    $this->setCollection($collection);
    return parent::_prepareCollection();
}

protected function _prepareColumns()
{
    parent::_prepareColumns();

 $this->addColumn('category_id', array(
        'header'    => Mage::helper('newsletter')->__('Category'),
        'index'     => 'category_grp',
        'type'      => 'categories',
        'options'   => $options,
        'align'     => 'left',
//      'filter_index' => $this->_getFlatExpressionColumn('category'),
    return $this;
}

category_grp は int の配列です

私の質問は、フィールドからアイテムをフィルタリングするフィルターをヘッダー列に追加するにはどうすればよいですか?

たとえば、category_id=7 (category_grp は 3,6,7,13) の製品のみをフィルター処理します...

4

2 に答える 2

0

magentofilter_condition_callbackオプションを見てください

$this->addColumn('categories', array(
                   ....                      
                   'filter_condition_callback' => array($this, '_applyMyFilter'),
                    ..
                 )
 );

 protected function _filterCategoriesCondition($collection, $column)
 {
     if (!$value = $column->getFilter()->getValue()) {
         return;
     }

     $this->getCollection()->addFieldToFilter('categories', array('finset' => $value));
 }

見る

于 2013-05-22T10:04:47.313 に答える
0

カスタムフィルターは必要ないと思います。フィールド名に合わせ
て設定してみてください:index

'index'     => 'category_id',
于 2012-10-04T09:11:36.020 に答える