2012-01-20 39 views
7

Tôi đang chỉnh sửa lưới trật tự bằng cách thêm các cột tùy chỉnh như thế nàyMagento vị trí cột lưới

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

nhưng mỗi cột được đặt trên phía bên phải của bảng, không có vấn đề mà tôi gọi addColumns.

Có cách nào để buộc vị trí không?

Cảm ơn

Trả lời

27

Bạn có thể sử dụng chức năng 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

Tính năng này hoạt động. – jruzafa

+2

xem, thứ tự gọi điện này trước khi phụ huynh có thể quan trọng, hãy xem câu trả lời của Praful Rajput – peedee

10

Nếu bạn đã từng nhìn _prepareColumns phương pháp mà bạn đang trọng bạn sẽ thấy rằng nó gọi sortColumnsByOrder. Vì vậy, nếu bạn đang thêm một cột sau thời điểm này (có thể với một sự kiện), bạn sẽ cần phải làm một cái gì đó như:

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

Nếu bạn gọi parent :: _ prepareColumns(); trước $ this-> addColumn() hoặc $ this-> addColumnAfter() thì cột mới của bạn luôn được hiển thị ở vị trí cuối cùng. Vì vậy, bạn có thể điều chỉnh vị trí của parent :: _ preparColumns(); tuyên bố theo yêu cầu của bạn.

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

     ),'real_order_id'); 

     parent::_prepareColumns(); 

Ở đây, cột mã vạch sẽ được hiển thị ngay sau khi Id đơn đặt hàng # cột. Nếu bạn đặt parent :: _ preparColumns(); trước $ this-> addColumnAfter sau đó nó sẽ không hiển thị ngay sau cột ID đặt hàng #. Nó sẽ chỉ hiển thị cuối cùng.

+0

Cảm ơn bạn đã chia sẻ điểm kinh nghiệm của mình .... –

+0

Câu trả lời này sẽ chỉ dẫn đến các cột mới được thêm vào lần đầu tiên hoặc rất vị trí cuối cùng trong danh sách. –

1

Khi các câu trả lời khác đã chỉ ra, bạn có thể sử dụng phương thức Mage_Adminhtml_Block_Widget_Grid::addColumnAfter để thực hiện việc này.

Tuy nhiên, những gì (hầu hết) các câu trả lời khác không đề cập đến là bạn phải gọi Mage_Adminhtml_Block_Widget_Grid::sortColumnsByOrder để các cột được sắp xếp lại.

Phương pháp Mage_Adminhtml_Block_Widget_Grid::sortColumnsByOrder được gọi là độc quyền theo phương pháp Mage_Adminhtml_Block_Widget_Grid::_prepareColumns như sau:

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

Điều này có nghĩa rằng lớp được thừa kế của bạn sẽ phải làm như vậy để tái sắp xếp các cột dựa trên đặt hàng mới của bạn. Ví dụ:

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; 
} 
Các vấn đề liên quan