Положение столбца сетки Magento - PullRequest
8 голосов
/ 20 января 2012

Я редактирую сетку заказов, добавляя пользовательские столбцы, подобные этому

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

, но каждый столбец располагается в правой части таблицы, где бы я ни вызывал addColumns.

Есть ли способ форсировать позицию?

Спасибо

Ответы [ 4 ]

29 голосов
/ 20 января 2012

Возможно, вы можете использовать функцию 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');
12 голосов
/ 20 января 2012

Если вы когда-либо смотрели на метод _prepareColumns, который вы переопределяете, вы увидите, что он вызывает sortColumnsByOrder. Поэтому, если вы добавляете столбец после этой точки (возможно, с событием), вам нужно сделать что-то вроде:

$this->addColumnsOrder('pagamenti', 'real_order_id')
    ->sortColumnsByOrder();
3 голосов
/ 28 октября 2014

Если вы вызвали parent :: _ prepareColumns (); до $ this-> addColumn () или $ this-> addColumnAfter () , тогда ваш новый столбец всегда отображался в последней позиции. Таким образом, вы можете настроить место выражения parent :: _ prepareColumns (); согласно вашему требованию.

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

        ),'real_order_id');

        parent::_prepareColumns();

Здесь столбец штрих-кода будет показан сразу после столбца Order Id # . Если вы поставите parent :: _ prepareColumns (); перед $ this-> addColumnAfter , то он не будет отображаться сразу после столбца Order ID #. Он будет отображаться только в конце.

2 голосов
/ 06 октября 2016

Как указывалось в других ответах, вы можете использовать метод 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...