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 に答える