自定义列的Magento网格过滤器索引

时间:2011-08-29 10:19:39

标签: magento grid renderer

Magento Grid

a)在准备集合时,我在查询中做了一些计算,并将这些值作为额外的列 -

ex - select 1 as extracolumn

现在我如何设置filter_index并对此列进行排序

或者

b)我正在使用渲染在列中显示自定义数据,如何设置filter_index并对此列进行排序

3 个答案:

答案 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

在这里,您可以为渲染器数据制作过滤器