在Magento 网格中
a)在准备集合时,我在查询中进行了一些计算,并将这些值作为额外的列 -
ex - select 1 as extracolumn
现在如何filter_index
在此列上设置和排序
或者
b) 我正在使用渲染在列中显示自定义数据,如何filter_index
在此列上设置和排序
我尝试了 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
在这里您可以为渲染器数据制作过滤器