マジェントグリッドで
a)コレクションの準備中に、クエリでいくつかの計算を行い、それらの値を追加の列として取得しました-
ex - select 1 as extracolumn
filter_index
この列を設定して並べ替えるにはどうすればよいですか
また
filter_index
b) レンダリングを使用してカスタム データを列に表示しています。この列を設定して並べ替えるにはどうすればよいですか
shadowice222 からの提案を試しましたが、フィールドをフィルター処理できませんでした。コア コードを調べたところ、「my_column」が定義されていないと不平を言っています。addExpressionAttributeToSelect を使用すると、内部的に同じことが行われますが、列も追加されます。
空の配列は、Zend_Db_Expr を文字列にキャストしようとする変数置換を行うコードをバイパスするためのものです。おそらく、クラスを拡張して addZendDbExptToSelect メソッドを持つようにする方がよいでしょう。
protected function _prepareCollection()
{
...
$collection->addExpressionAttributeToSelect('my_column', new Zend_Db_Expr("(some expression)"), array());
....
}
protected function _getFlatExpressionColumn($key) {
switch ($key) {
case 'my_column':
$result = new Zend_Db_Expr("(some expression)");
break;
}
}
protected function _prepareCollection()
{
...
$col->getSelect()
->columns(array(
'my_column' => $this->_getFlatExpressionColumn('my_column'),
))
;
...
}
protected function _prepareColumns()
{
...
$this->addColumn('my_column', array(
'header' => $hlp->__('My Column Title'),
'index' => 'my_column',
'filter_index' => $this->_getFlatExpressionColumn('my_column'),
));
...
}
この関数をどのように動作させることができるかを示します:
Mage_Adminhtml_Block_Widget_Grid::_addColumnFilterToCollection
レンダラーデータのフィルターを作成できます