2

我创建了一个观察者,它在管理员的时事通讯网格中添加了一个字段,如下所示:

public function AddItemColumnToGrid($observer)
{
...
    if ($_type == 'adminhtml/newsletter_subscriber_grid') {

        $_block->addColumnAfter('subscriber_name', array(
            'header'=> Mage::helper('newsletter')->__('Name'),
            'type'  => 'text',
            'index' => 'subscriber_name',
        ), 'subscriber_email');
    }
...
}

我想不通。但是 Magento 总是在最后显示我的 Subscriber_name 字段(作为顺序中的最后一个)。ColumnAfter 不起作用。为什么 ?

我正在解决这个问题:

        <events>
        <adminhtml_block_html_before>
4

1 回答 1

3

这是因为排序发生在您进入 HTML 生成之前:

Mage_Adminhtml_Block_Widget_Grid:

protected function _beforeToHtml()
{
    $this->_prepareGrid();             // <-- sort columns
    return parent::_beforeToHtml();    // <-- dispatch event
}

您可以做的是在添加列后再次排序:

    $_block->addColumnAfter('subscriber_name', array(
        'header'=> Mage::helper('newsletter')->__('Name'),
        'type'  => 'text',
        'index' => 'subscriber_name',
    ), 'subscriber_email');
    $_block->sortColumnsByOrder();
于 2013-03-11T16:32:56.817 回答