我正在運行腳本以自動取消訂單。 我的腳本看起來像這樣。以訂單取消時未觸發Magento事件
$order->cancel()->save();
這樣做的問題在於,它正確地取消訂單,但似乎並沒有派遣order_cancel_after
事件。
我應該如何解決這個問題,我可以在腳本中調度這個事件嗎?爲什麼取消操作與單擊後臺訂單頁面中的取消按鈕有所不同?
我正在運行腳本以自動取消訂單。 我的腳本看起來像這樣。以訂單取消時未觸發Magento事件
$order->cancel()->save();
這樣做的問題在於,它正確地取消訂單,但似乎並沒有派遣order_cancel_after
事件。
我應該如何解決這個問題,我可以在腳本中調度這個事件嗎?爲什麼取消操作與單擊後臺訂單頁面中的取消按鈕有所不同?
你可以派遣自己的事件是這樣的:
Mage::dispatchEvent(
'order_cancel_after',
array('order' => $order, 'quote' => $this->getQuote())
);
將此代碼accroding您的使用。
這是當我調用$order->cancel()
時想要在前端觸發order_cancel_after
事件時想到的。我不得不在Magento_Authorizenet問題上執行此操作,因爲當信用卡被拒時,該事件未被解僱。
編輯:我剛剛意識到你的問題是Magento 1 EE。如果有人在Magento 2 EE上出現這個問題,我會在這裏留下。
創建使用指定的內容如下文件(更換與供應商的名字[商家]):
此文件是負責讓Magento知道你的模塊。在添加此答案中的所有文件後,您需要運行php bin/magento setup:upgrade
。
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'[Vendor]_Reward',
__DIR__
);
此文件聲明模塊,它依賴於任何模塊(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>
這個文件將寄存器,已經爲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>
可以大家分享添加事件句柄在擴展的config.xml –
這是企業獎勵延伸,我想觸發order_cancel_after所以這種擴展將將獎勵退回給客戶。 – Jack
@Jack我現在正在處理Magento 2 EE中完全相同的問題。看起來,Magento_Rewards中的order_cancel_after事件僅配置爲在後端觸發。我將添加一個答案,以展示如何添加模塊以在前端爲此註冊事件觀察者。 – floorz