0

Magento の M2e 拡張機能を使用しています。Ess_M2ePro_Adminhtml_ListingControllerここで、ファイル内のクラスのメソッドを呼び出したいと思いますapp/code/community/Ess/M2ePro/controllers/Adminhtml/ListingController.php

しかし、方法はわかりません。クラスにアクセスしてメソッドを使用するためのオブジェクトまたはモデルを作成できません。このコントローラー メソッドを直接呼び出すのは得策ではないかもしれませんが、私の場合 (関連付けられた magento 製品を eBay リストから削除する)、このメソッドを呼び出す必要があります。

一般に、これらのアクションは magento バックエンドから呼び出されます。また、admin_html セッションを作成しようとしましたが、現時点ではそれ以上のアイデアはありません。

これが例です。私は通常のPHPコードで作業していますが、特別なことは何もありません:

class Ess_M2ePro_Adminhtml_ListingController extends Ess_M2ePro_Controller_Adminhtml_MainController
{
    //#############################################

    protected function _initAction()
    {
        /** removed **/
    }

    protected function _isAllowed()
    {
        return Mage::getSingleton('admin/session')->isAllowed('m2epro/listings/listing');
    }

    //#############################################

    public function indexAction()
    {
     /** removed **/
    }

    //#############################################

    public function searchAction()
    {
       /** removed **/
    }

    public function searchGridAction()
    {
       /** removed **/
    }


    public function lockListingNowAction()
    {
        $listingId = (int)$this->getRequest()->getParam('id');
        $component = $this->getRequest()->getParam('component');

        $lockItemParams = array(
            'id' => $listingId,
            'component' => $component
        );

        $lockItem = Mage::getModel('M2ePro/Listing_LockItem',$lockItemParams);

        if (!$lockItem->isExist()) {
            $lockItem->create();
        }

        exit();
    }




}  

そして、私はこのようなものを探しています:

$test = Mage::getModel('M2ePro/Ess_M2ePro_Adminhtml_ListingController')->lockListingNowAction();
4

1 に答える 1

5

他のコントローラーからメソッドを呼び出さないでください。特にあなたの場合、exitメソッドの最後にあるとき。コントローラーを使用している場合は、次
のメソッドを使用できます。_forward

$this->_forward($action = 'lockListingNowAction', $controller = 'adminhtml_listing', $module = 'M2ePro', $params = array('id'=>$id)) //controller name may be different

しかし、最もクリーンな方法は、ヘルパーに必要なコードを用意し、両方のコントローラーでそのヘルパーからコードを呼び出すことです。

于 2013-10-21T10:38:13.623 に答える