Magento网格列位置

时间:2012-01-20 12:27:15

标签: php magento

我正在通过添加像这样的自定义列来编辑订单网格

$this->addColumn('pagamenti', array(
  'header'    => 'Paymentsource',
  'width'=>'50px',
  'align'     =>'left',
  'type'    => 'text',
  'renderer' => 'Blablabla_Adminhtml_Block_Sales_Order_Renderer_lol'
));

但无论我在哪里调用addColumns,每列都位于表格的最右侧。

有没有办法强迫这个位置?

由于

4 个答案:

答案 0 :(得分: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');

答案 1 :(得分:12)

如果您曾查看过覆盖的_prepareColumns方法,则会看到它调用sortColumnsByOrder。因此,如果你在这一点之后添加一个列(可能是一个事件),你需要做类似的事情:

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

答案 2 :(得分:3)

如果您在 $ this-> addColumn() $ this-> addColumnAfter() parent :: _ prepareColumns(); strong>然后您的新列始终显示在最后位置。因此,您可以根据您的要求调整 parent :: _ prepareColumns(); 语句的位置。

$this->addColumnAfter('barcode', array(
            'header'           => Mage::helper('sales')->__('Barcode'),
            'align'            => 'left',
            'index' => 'barcode',
            'width' => '200px',

        ),'real_order_id');

        parent::_prepareColumns();

此处,条形码列将显示在订单ID#列之后。如果您在 $ this-> addColumnAfter 之前放置 parent :: _ prepareColumns(); ,那么它将不会显示在订单ID#列之后。它最后只显示。

答案 3 :(得分: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;
}