2012-01-20 19 views
7

sto modificando la griglia di ordine con l'aggiunta di colonne personalizzate come questoMagento posizione della colonna della griglia

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

ma ogni colonna è posizionato all'estrema destra della tabella, non importa dove io chiamo addColumns.

C'è un modo per forzare la posizione?

Grazie

risposta

27

probabilmente si può usare la funzione 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

Questo è funziona. – jruzafa

+2

attenzione, l'ordine di chiamare questo prima che il genitore possa essere importante, vedere la risposta di Praful Rajput – peedee

10

Se hai mai guardato il metodo _prepareColumns che si sta ignorando vedrai che chiama sortColumnsByOrder. Quindi, se si sta aggiungendo una colonna dopo questo punto (magari con un evento) è necessario fare qualcosa di simile:

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

Se si chiama parent :: _ prepareColumns(); prima di $ this-> addColumn() o $ this-> addColumnAfter() quindi la nuova colonna è sempre stata visualizzata nell'ultima posizione. Quindi è possibile regolare la posizione di parent :: _ prepareColumns(); dichiarazione secondo il vostro requisito.

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

     ),'real_order_id'); 

     parent::_prepareColumns(); 

Qui, colonna del codice a barre verrà mostrato solo dopo il ID ordine # colonna. Se si inserisce parent :: _ prepareColumns(); prima di $ this-> addColumnAfter quindi non verrà visualizzato subito dopo la colonna N. ID ordine. Verrà visualizzato solo alla fine.

+0

Grazie per aver condiviso la tua exp .... –

+0

Questa risposta farà sì che le nuove colonne vengano aggiunte al primo o molto ultime posizioni nella lista. –

1

Come indicato dalle altre risposte, è possibile utilizzare il metodo Mage_Adminhtml_Block_Widget_Grid::addColumnAfter per ottenere ciò.

Tuttavia ciò che (la maggior parte) delle altre risposte non menzionano è che è necessario chiamare esplicitamente Mage_Adminhtml_Block_Widget_Grid::sortColumnsByOrder in modo che le colonne vengano riordinate.

Procedimento Mage_Adminhtml_Block_Widget_Grid::sortColumnsByOrder viene chiamato esclusivamente mediante Mage_Adminhtml_Block_Widget_Grid::_prepareColumns come segue:

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

Ciò significa che la classe derivata dovrà fare lo stesso al fine di ri-ordinare le colonne in base alla propria nuova ordinazione. Ad esempio:

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; 
} 
Problemi correlati