Adminhtmlグリッド列には、ブロッククラスを指定するfilterプロパティがあります。ブール値yes/noフィールドの場合、通常はadminhtml/widget_grid_column_filter_select
となります。
フィールドタイプが「オプション」の場合、自動的に使用されます。
_prepareCollection()
でこれを試してみてください:これはまだ列に "いいえ" "はい" と自分の価値観をレンダリングしなければならない
$this->addColumnAfter('refunded', array(
'header' => Mage::helper('helper')->__('Refunded'),
'index' => 'refunded',
'type' => 'options',
'options' => array(0 => $this->__('No'), 1 => $this->__('Yes'))
), 'qty');
、および:
'refunded' => new Zend_Db_Expr("IF(qty_refunded > 0, 1, 0)"),
そして_prepareColumns()
使用中フィルタドロップダウンとして適切なオプションが選択されます。
計算された値を持つ列は、MySQLによってWHERE節で直接参照できないため、これだけでは不十分です。 Magentoには、これを回避するための2つのオプションがあります。
カラムフィルタブロックには、コレクションをフィルタリングするために使用される条件を返すメソッドgetCondition()
があります。例については、Mage_Adminhtml_Block_Widget_Grid_Column_Filter_Abstract::getCondition()
を参照してください。
フィルタの実行に使用するSQLをカスタマイズする必要がある場合は、Mage_Adminhtml_Block_Widget_Grid_Column_Filter_Select
まで拡張した独自の列フィルタブロックを作成し、必要に応じて返された条件を調整します。
カスタムフィルタがaddColumn()
定義で、このような列に指定することができます。
'type' => 'options',
'options' => array(0 => $this->__('No'), 1 => $this->__('Yes')),
'filter' => 'your_module/adminhtml_widget_grid_column_filter_custom',
あなたはMagentoののORMフィルタの構文の制限の外で作業するprefere場合は、コレクションは使用して直接選択し、変更することができますフィルタのコールバック:
'type' => 'options',
'options' => array(0 => $this->__('No'), 1 => $this->__('Yes')),
'filter_condition_callback' => array($this, '_applyMyFilter'),
コールバックは引数としてコレクションと列を受け取ります。ここでその方法のための簡単な例である:(計算値に対してフィルタリング)両方のアプローチは、MySQLで非常に非効率的であることは言うまでもない
protected function _applyMyFilter(Varien_Data_Collection_Db $collection, Mage_Adminhtml_Block_Widget_Grid_Column $column)
{
$select = $collection->getSelect();
$field = $column->getIndex();
$value = $column->getFilter()->getValue();
$select->having("$field=?, $value);
}
。しかし、おそらくそれはあなたにとってこの問題ではありません。
はい/いいえの列に 'options'という型を使用しない理由はありますか? –
@JürgenThelen - はい、マジェンタの初心者です。しかし、私はあなたの提案を試みるでしょう。 – nevvermind
嫌悪感はありません。私はあなたが何らかの理由でそれを避けていると思った。 –