2012-01-20 76 views
7

我通過添加自定義列這樣Magento的格列位置

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

編輯順序網格但每列位於最右邊的表,無論在哪裏我打電話addColumns。

有沒有辦法迫使位置?

感謝

回答

27

你或許可以使用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'); 
+0

這是行得通的。 – jruzafa

+2

看出來,調用這個父之前可能是重要的順序,請參閱Praful拉傑普特的答案 – peedee

10

如果你曾經看了_prepareColumns方法,你重寫你會看到它調用sortColumnsByOrder。因此,如果你在這之後添加一列(或許與事件),你需要做的是這樣的:

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

如果你叫父:: _ prepareColumns();$這個 - > addColumn()$這個 - > addColumnAfter()那麼你的新列一直顯示在最後的位置。所以,你可以調整父母的地方:: _ prepareColumns();聲明根據您的要求。

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

     ),'real_order_id'); 

     parent::_prepareColumns(); 

這裏,條碼列會剛過訂單編號列中顯示。如果你把parent :: _ prepareColumns();$這個 - > addColumnAfter那麼它將不只是訂單編號欄後顯示。它只會顯示在最後。

+0

感謝您分享EXP .... –

+0

這個答案只會造成新列被添加到第一個或非常列表中的最後位置。 –

1

至於其他的答案已經指出的那樣,你可以利用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; 
}