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

3
Magento Grid 中,
a) 当准备集合时,我在查询中进行了一些计算,并将这些值作为额外列获得—— 例如-select 1 as extracolumn 现在,我该如何设置此列的 filter_index 和排序?

OR

b) 我正在使用渲染来显示自定义数据列,如何在此列上设置 filter_index 和排序?
3个回答

2

我尝试了shadowice222的建议,但它没有允许我过滤字段。查看了核心代码,它抱怨“my_column”未被定义。使用addExpressionAttributeToSelect在内部执行相同的操作,但也会添加列。

空数组用于绕过代码,该代码进行变量替换,因为这将尝试将Zend_Db_Expr强制转换为字符串。也许更好的方法是扩展类来拥有一个addZendDbExptToSelect方法。

protected function _prepareCollection()
{
    ...
    $collection->addExpressionAttributeToSelect('my_column', new Zend_Db_Expr("(some expression)"), array());
    ....
}

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'),
    ));
    ...
}

0

展示如何使用这个函数:

Mage_Adminhtml_Block_Widget_Grid::_addColumnFilterToCollection

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


让我们举个例子: protected function _prepareCollection() { $collection = Mage::getModel('mymodule/mymodel')->getCollection(); //这个表格没有状态列,所以我使用了渲染器 $this->setCollection($collection); return parent::_prepareCollection(); }$this->addColumn('status', array( 'header' => Mage::helper('module')->__('Object'), 'filter_index' => ????, 'renderer' => new Mycompany_Mymodule_Block_Adminhtml_Renderer_Status(), ));应该使用什么filter_index,并且如何覆盖_addColumnFilterToCollection方法? - sushantsahay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接