Magento - 向销售订单视图页面添加按钮(观察者/事件)

时间:2012-05-21 20:09:22

标签: magento magento-1.5

我尝试在销售订单视图页面上添加自定义打印按钮(如打印发票)( 销售&gt;订单&gt;订单#...查看 < /强>)。

我已成功完成此操作,但现在有两个相同页面的模块。因此,我尝试使用观察者/事件方法并遇到麻烦。

这就是我对群众动作打印所拥有的,它运作良好(仅限上一页(销售&gt;订单)。

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

现在,当我尝试添加产品视图页面的按钮时(在同一功能下):

// 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

我试过了:

  • $嵌段&GT; _addButton
  • $嵌段&GT; _addItem

但似乎没有任何效果。 为什么这不起作用?

2 个答案:

答案 0 :(得分: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'
            ));
        }

答案 1 :(得分:1)

在Magento中,任何以下划线开头的类函数都被定义为private或protected - 它是核心团队使用的命名约定 - 因此您无法从类外部调用它。这就是$ block-&gt; _addButton()不起作用的原因。

好消息是你可以调用$ block-&gt; addButton()(没有下划线)。这是Mage_Adminhtml_Block_Widget_Container为您提供的公共方法。

另外,你不能从$ this调用addButton(),因为$ this指向你的观察者类,它没有定义addButton()方法(这就是你的错误所说的)。