2012-05-21 59 views
1

我试图在销售订单查看页面上添加自定义打印按钮(如打印发票)(销售>订单>订单#...查看)。Magento - 将按钮添加到销售订单查看页面(观察者/事件)

我已经成功完成了一个,但现在有两个模块,即同一页。因此我试图做Observer /事件方法并且遇到麻烦。

这就是我对质量作用打印和它的伟大工程(前一页只(销售>订单)。

$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 

我已经试过:

  • $块 - > _ Add按钮
  • $块 - > _的addItem

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

回答

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

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

好消息是你可以调用$ block-> addButton()(没有下划线)。这是Mage_Adminhtml_Block_Widget_Container为您提供的公共方法。因为$ this指向你的观察者类,它没有定义addButton()方法(这就是你的错误所说的),所以你不能从$ this调用addButton()。

+1

谢谢乔的答案。我在发布之前解决了这个问题,但想要感谢您帮助我进一步了解我的错误!感谢您的贡献。 – Geoff

相关问题