2012-05-21 4 views
1

영업 주문보기 페이지 (인쇄 주문서)에 주문 인쇄 버튼 (인쇄 인보이스와 같은)을 추가하려고합니다 (영업> 주문> 주문 번호 ...) 보기).Magento - 판매 주문보기 페이지에 버튼 추가

나는 이것을 성공적으로했지만 지금은 같은 페이지에 두 개의 모듈이 있습니다. 따라서 Observer/Event 메서드를 수행하려고하는데 문제가 발생했습니다.

내가를 인쇄 할 때 대량 작업을 위해 가지고이 큰 (이전 페이지 만 (판매> 주문) 일 것입니다.

$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 

이 나는 ​​시도했다 :

  • $ 블록 -> _ addButton
  • $ 블록 -> _ 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에서 밑줄로 시작하는 모든 클래스 함수는 개인 또는 보호 된 것으로 정의됩니다. 핵심 팀에서 사용하는 명명 규칙이므로 클래스 외부에서 호출 할 수 없습니다. 이것이 $ block -> _ addButton()이 작동하지 않는 이유입니다.

좋은 소식은 $ block-> addButton() (밑줄 없음)을 호출 할 수 있다는 것입니다. Mage_Adminhtml_Block_Widget_Container가 제공하는 공개 메소드입니다.

$ this가 addButton() 메서드가 정의되어 있지 않은 관찰자 클래스를 가리키기 때문에 ($ this에서 addButton()을 호출 할 수 없습니다.)

+1

조에게 감사드립니다. 게시하기 전에이 문제를 해결했지만 내 실수를 더 잘 이해할 수 있도록 도와 주신 것에 감사드립니다. 당신의 기여에 감사드립니다. – Geoff

관련 문제