在 Magento Grid
中a)在准备集合时,我在查询中做了一些计算,并将这些值作为额外的列 -
ex - select 1 as extracolumn
现在我如何设置filter_index
并对此列进行排序
b)我正在使用渲染在列中显示自定义数据,如何设置filter_index
并对此列进行排序
答案 0 :(得分:2)
我尝试了shadowice222的建议,但它不允许我对该字段进行过滤。看了核心代码,它抱怨没有定义'my_column'。使用addExpressionAttributeToSelect与内部相同,但也添加了列。
空数组是绕过执行变量替换的代码,因为它会尝试将Zend_Db_Expr强制转换为字符串。也许更好的方法是将类扩展为具有addZendDbExptToSelect方法。
protected function _prepareCollection()
{
...
$collection->addExpressionAttributeToSelect('my_column', new Zend_Db_Expr("(some expression)"), array());
....
}
答案 1 :(得分:1)
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'),
));
...
}
答案 2 :(得分:0)
显示如何使用此功能:
Mage_Adminhtml_Block_Widget_Grid::_addColumnFilterToCollection
在这里,您可以为渲染器数据制作过滤器