我正在通过添加像这样的自定义列来编辑订单网格
$this->addColumn('pagamenti', array(
'header' => 'Paymentsource',
'width'=>'50px',
'align' =>'left',
'type' => 'text',
'renderer' => 'Blablabla_Adminhtml_Block_Sales_Order_Renderer_lol'
));
但无论我在哪里调用addColumns,每列都位于表格的最右侧。
有没有办法强迫这个位置?
由于
答案 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;
}