2012-01-20 12 views
7

mam edycję siatki zamówienia poprzez dodanie niestandardowych kolumn jak toMagento pozycja kolumna siatki

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

ale każda kolumna jest umieszczony po prawej stronie stołu, bez względu na to gdzie mogę zadzwonić addColumns.

Czy istnieje sposób na wymuszenie pozycji?

Dzięki

Odpowiedz

27

Prawdopodobnie można użyć funkcji 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

To działa. – jruzafa

+2

uważaj, kolejność wywoływania tego przed rodzicem może być ważna, zobacz odpowiedź Praful Rajput – peedee

10

Jeśli kiedykolwiek spojrzał na metodzie _prepareColumns że jesteś nadrzędne zobaczysz, że nazywa to sortColumnsByOrder. Więc jeśli dodanie kolumny po tym punkcie (być może ze zdarzeniem), musisz zrobić coś takiego:

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

Jeśli nazywa parent :: _ prepareColumns(); przed $ this-> addColumn() lub $ this-> addColumnAfter() to twoja nowa kolumna zawsze była wyświetlana na ostatniej pozycji. Możesz więc zmienić miejsce parent :: _ prepareColumns(); oświadczenie zgodnie z wymaganiami.

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

     ),'real_order_id'); 

     parent::_prepareColumns(); 

Tutaj, kolumna kreskowy pojawi się tuż po Order ID # kolumny. Jeśli umieścisz parent :: _ prepareColumns(); przed $ this-> addColumnAfter to nie wyświetli się zaraz po kolumnie Numer zamówienia. Wyświetli się tylko w końcu.

+0

Dziękujemy za udostępnienie exp ... –

+0

Ta odpowiedź spowoduje tylko dodanie nowych kolumn do pierwszego lub bardzo ostatnie pozycje na liście. –

1

Jak wskazano w innych odpowiedziach, można to zrobić, korzystając z metody Mage_Adminhtml_Block_Widget_Grid::addColumnAfter.

Jednak na większość (innych) odpowiedzi nie wspomina się, że należy jawnie wywołać Mage_Adminhtml_Block_Widget_Grid::sortColumnsByOrder, aby zmienić kolejność kolumn na.

Sposób Mage_Adminhtml_Block_Widget_Grid::sortColumnsByOrder nazywany jest wyłącznie metodą Mage_Adminhtml_Block_Widget_Grid::_prepareColumns następująco:

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

Oznacza to, że klasa pochodna będzie musiał zrobić to samo w celu ponownego sortowania kolumn w oparciu o nową zamawiania. Na przykład:

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; 
} 
Powiązane problemy