Magento - Add Button to Sales Order View Page (Observer/Event)

怎甘沉沦 提交于 2019-12-03 22:59:04

问题


I'm trying to add a custom printing button (like print invoice) on the Sales Order View page (Sales > Orders > Order #... view).

I've done this successfully with a but now have two modules that that same page. Therefore I'm trying to do the Observer/Event method and am running into trouble.

This is what I have for the Mass Action printing and it works great (previous page only (Sales > 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'),
        ));
      }

Now when I try to add the button for the Product View page (under the same function):

// 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'
            ));
        }

I keep getting errors like this:

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

I've tried:

  • $block->_addButton
  • $block->_addItem

but nothing seems to work. Why is this not working???


回答1:


I solved it a little bit after I posted. The solution for me was the following:

// 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'
            ));
        }



回答2:


In Magento, any class function starting with an underscore is defined as private or protected -- it's the naming convention the core team uses -- so you cannot call it from outside the class. This is why $block->_addButton() does not work.

The good news is you can call $block->addButton() (no underscore). This is the public method that Mage_Adminhtml_Block_Widget_Container provides you.

Also, you can't call addButton() from $this, because $this is pointing to your observer class, which doesn't have an addButton() method defined (which is what your error is saying).



来源:https://stackoverflow.com/questions/10691895/magento-add-button-to-sales-order-view-page-observer-event

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!