1

販売注文ビューページ( [販売]>[注文]>[注文番号...]ビュー)にカスタム印刷ボタン(請求書の印刷など)を追加しようとしています。

私はこれを正常に実行しましたが、同じページに2つのモジュールがあります。したがって、私は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

私はもう試した:

  • $ 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 に答える