2016-09-15 106 views
2

我正在運行腳本以自動取消訂單。 我的腳本看起來像這樣。以訂單取消時未觸發Magento事件

$order->cancel()->save(); 

這樣做的問題在於,它正確地取消訂單,但似乎並沒有派遣order_cancel_after事件。

我應該如何解決這個問題,我可以在腳本中調度這個事件嗎?爲什麼取消操作與單擊後臺訂單頁面中的取消按鈕有所不同?

+0

可以大家分享添加事件句柄在擴展的config.xml –

+0

這是企業獎勵延伸,我想觸發order_cancel_after所以這種擴展將將獎勵退回給客戶。 – Jack

+0

@Jack我現在正在處理Magento 2 EE中完全相同的問題。看起來,Magento_Rewards中的order_cancel_after事件僅配置爲在後端觸發。我將添加一個答案,以展示如何添加模塊以在前端爲此註冊事件觀察者。 – floorz

回答

0

你可以派遣自己的事件是這樣的:

Mage::dispatchEvent(
     'order_cancel_after', 
     array('order' => $order, 'quote' => $this->getQuote()) 
    ); 

將此代碼accroding您的使用。

1

這是當我調用$order->cancel()時想要在前端觸發order_cancel_after事件時想到的。我不得不在Magento_Authorizenet問題上執行此操作,因爲當信用卡被拒時,該事件未被解僱。

編輯:我剛剛意識到你的問題是Magento 1 EE。如果有人在Magento 2 EE上出現這個問題,我會在這裏留下。

創建使用指定的內容如下文件(更換與供應商的名字[商家]):

應用程序/代碼/ [商家] /Reward/registration.php

此文件是負責讓Magento知道你的模塊。在添加此答案中的所有文件後,您需要運行php bin/magento setup:upgrade

<?php 
\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE, 
    '[Vendor]_Reward', 
    __DIR__ 
); 

應用程序/代碼/ [供應商] /Reward/etc/module.xml

此文件聲明模塊,它依賴於任何模塊(Magento_Reward在我們的例子)的設置的版本。

<?xml version="1.0"?> 

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"> 
    <module name="[Vendor]_Reward" setup_version="0.1.0"> 
     <sequence> 
      <module name="Magento_Reward"/> 
     </sequence> 
    </module> 
</config> 

應用程序/代碼/ [供應商] /Reward/etc/frontend/events.xml

這個文件將寄存器,已經爲adminhtml(後端)中定義的股票Magento_Reward觀察者,但這樣做對前端(因爲它在等位置/ 前端):

<?xml version="1.0"?> 

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> 
    <event name="order_cancel_after"> 
     <observer name="magento_reward" instance="Magento\Reward\Observer\ReturnRewardPoints" /> 
    </event> 
</config>