Magento网格列位置

8
我正在编辑订单网格,通过添加自定义列来实现,就像这样。
$this->addColumn('pagamenti', array(
  'header'    => 'Paymentsource',
  'width'=>'50px',
  'align'     =>'left',
  'type'    => 'text',
  'renderer' => 'Blablabla_Adminhtml_Block_Sales_Order_Renderer_lol'
));

但是无论我在哪里调用addColumns方法,每一列都位于表格最右边。有没有办法强制改变位置?

谢谢。

4个回答

29
你可以很可能使用addColumnAfter函数。
$this->addColumnAfter('pagamenti', array(
  'header'    => 'Paymentsource',
  'width'=>'50px',
  'align'     =>'left',
  'type'    => 'text',
  'renderer' => 'Blablabla_Adminhtml_Block_Sales_Order_Renderer_lol'
), 'id_of_column_to_be_after');

2
注意,调用此函数的顺序可能比父级重要,请参见Praful Rajput的答案。 - peedee

14

如果你曾经查看过你正在覆盖的 _prepareColumns 方法,你会发现它调用了 sortColumnsByOrder。因此,如果你在这个点之后添加了一列(也许是通过事件),那么你需要像下面这样做:

$this->addColumnsOrder('pagamenti', 'real_order_id')
    ->sortColumnsByOrder();

这是一个非常有价值的提示。非常感谢! - Vaisakh Pc

4
如果在调用 parent::_prepareColumns(); 之前调用 $this->addColumn()$this->addColumnAfter(),那么你的新列总是显示在最后一个位置。因此,你可以根据需要调整 parent::_prepareColumns(); 语句的位置。
$this->addColumnAfter('barcode', array(
            'header'           => Mage::helper('sales')->__('Barcode'),
            'align'            => 'left',
            'index' => 'barcode',
            'width' => '200px',

        ),'real_order_id');

        parent::_prepareColumns();

在这里,条形码列将会显示在订单编号#列之后。如果你在$this->addColumnAfter之前放置parent::_prepareColumns();,它就不会显示在订单编号#列之后,而是只会在最后显示。


这个答案只会导致新列被添加到列表的最前面或最后面。 - Luke A. Leber

2

正如其他答案所指出的那样,您可以利用Mage_Adminhtml_Block_Widget_Grid::addColumnAfter方法来实现此操作。

然而,大多数其他答案未提及的是,您必须显式调用Mage_Adminhtml_Block_Widget_Grid::sortColumnsByOrder方法,才能重新排序列

Mage_Adminhtml_Block_Widget_Grid::sortColumnsByOrder方法仅被Mage_Adminhtml_Block_Widget_Grid::_prepareColumns方法独家调用,如下所示:

/// app/code/core/Mage/Adminhtml/Block/Widget/Grid.php line 557
protected function _prepareColumns()
{
    $this->sortColumnsByOrder();
    return $this;
}

这意味着您的派生类也必须这样做,以便根据新的排序方式重新排序列。例如:
protected function _prepareColumns() {

    /// Let the parent add some columns
    /// Mage_Eav_Block_Adminhtml_Attribute_Grid_Abstract does add some
    parent::_prepareColumns();

    /// Add some new columns
    $this->addColumnAfter('sort_order', array(
        'header' => $this->__('Sort Order'),
        'sortable' => true,
        'index' => 'sort_order'
    ), 'frontend_label');

    $this->addColumnAfter('attribute_group_name', array(
        'header' => $this->__('Attribute Group'),
        'sortable' => true,
        'index' => 'attribute_group_name'), 'sort_order');

    /// ! IMPORTANT ! Re-sort the columns with the new additions
    $this->sortColumnsByOrder();
    return $this;
}

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