2012-05-21 79 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

相關問題