Magento - кнопка «Добавить» на странице просмотра заказа клиента (наблюдатель / событие)

Я пытаюсь добавить пользовательскую кнопку печати (например, счет для печати) на странице просмотра заказа на продажу (Sales > Orders > Order #... view).

Я сделал это успешно, но теперь у меня есть два модуля на той же странице. Поэтому я пытаюсь сделатьObserver/Event метод и у меня проблемы.

Это то, что у меня есть дляMass Action printing и это прекрасно работает (только на предыдущей странице (Sales & gt; Orders).

$block = $observer->getEvent()->getBlock();

// Mass Action Printing option
if(get_class($block) =='Mage_Adminhtml_Block_Widget_Grid_Massaction'
     && $block->getRequest()->getControllerName() == 'sales_order')
     {
        $block->addItem('test_mass_print', array(
            'label' => 'Print Test',
            'url' => Mage::app()->getStore()->getUrl('orderforms/order/pdfTest'),
        ));
      }

Теперь, когда я пытаюсь добавить кнопку дляProduct View страница (под той же функцией):

// Order View Page button
        if(get_class($block) =='Mage_Adminhtml_Block_Sales_Order_View'
            && $block->getRequest()->getControllerName() == 'sales_order')
        {
            $this->_addButton('test_print', array(
                'label'     => Mage::helper('sales')->__('Test'),
                'onclick'   => Mage::app()->getStore()->getUrl('orderforms/order/print'),
                'class'     => 'go'
            ));
        }

Я продолжаю получать такие ошибки:

Fatal error: Call to undefined method Company_Test_Model_Observer::_addButton() in app/code/local/Company/Test/Model/Observer.php on line 24

Я пробовал:

$block->_addButton $block->_addItem

но ничего не работает.Why is this not working???

Ответы на вопрос(2)

как написал. Решение для меня было следующее:

// Order View Page button
        if(get_class($block) =='Mage_Adminhtml_Block_Sales_Order_View'
            && $block->getRequest()->getControllerName() == 'sales_order')
        {
            $block->addButton('test_print', array(
                'label'     => 'Test',
                'onclick'   => 'setLocation(\'' . $block->getUrl('html/sales_order/print') . '\')',
                'class'     => 'go'
            ));
        }

начинающаяся с подчеркивания, определяется как частная или защищенная - это соглашение об именах, используемое основной командой - поэтому вы не можете вызывать ее извне класса. Вот почему $ block -> _ addButton () не работает.

Хорошей новостью является то, что вы можете вызвать $ block-> addButton () (без подчеркивания). Это публичный метод, который вам предоставляет Mage_Adminhtml_Block_Widget_Container.

Кроме того, вы не можете вызывать addButton () из $ this, потому что $ this указывает на ваш класс наблюдателя, у которого нет определенного метода addButton () (о чем говорит ваша ошибка).

ВАШ ОТВЕТ НА ВОПРОС