1

我正在尝试在销售订单视图页面(销售>订单>订单#...视图)上添加自定义打印按钮(如打印发票)。

我已经使用 a 成功完成了此操作,但现在在同一页面上有两个模块。因此,我正在尝试执行Observer/Event方法并且遇到了麻烦。

这就是我为Mass Action 打印所拥有的,而且效果很好(仅限上一页(销售 > 订单)。

$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

我试过了:

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

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

4

2 回答 2

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'
            ));
        }
于 2012-05-22T16:47:05.263 回答
1

在 Magento 中,任何以下划线开头的类函数都被定义为私有或受保护的——这是核心团队使用的命名约定——所以你不能从类外调用它。这就是 $block->_addButton() 不起作用的原因。

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

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

于 2012-05-22T03:55:02.223 回答