我是Magento的新手。我想建立一個觀察者,在取消訂單時將對我的數據庫執行查詢,並將決定訂單是否可以取消(這是根據某個狀態決定的)。如果它不能被取消,那麼它應該中斷取消事件並顯示一條消息,指出訂單不能被取消。觀察員可以打破Magento中的事件嗎?
我應該選擇哪一個事件,order_cancel_after
或sales_order_item_cancel
,我該如何擺脫這個事件呢?
在此先感謝。 :)
我是Magento的新手。我想建立一個觀察者,在取消訂單時將對我的數據庫執行查詢,並將決定訂單是否可以取消(這是根據某個狀態決定的)。如果它不能被取消,那麼它應該中斷取消事件並顯示一條消息,指出訂單不能被取消。觀察員可以打破Magento中的事件嗎?
我應該選擇哪一個事件,order_cancel_after
或sales_order_item_cancel
,我該如何擺脫這個事件呢?
在此先感謝。 :)
對此沒有普遍的答案,它取決於事件觸發的上下文以及之後會發生的情況。
的事件沒有一個接口來「停止」他們,他們不依賴於實際的「事件」(即訂單取消)比其他的名字。
所以你必須看看那裏sales_order_item_cancel
被觸發的Mage_Sales_Model_Order_Item
代碼(order_cancel_after
顯然是錯誤的地方,在這一點上,因爲看的訂單已經取消):
/**
* Cancel order item
*
* @return Mage_Sales_Model_Order_Item
*/
public function cancel()
{
if ($this->getStatusId() !== self::STATUS_CANCELED) {
Mage::dispatchEvent('sales_order_item_cancel', array('item'=>$this));
$this->setQtyCanceled($this->getQtyToCancel());
$this->setTaxCanceled($this->getTaxCanceled() + $this->getBaseTaxAmount() * $this->getQtyCanceled()/$this->getQtyOrdered());
$this->setHiddenTaxCanceled($this->getHiddenTaxCanceled() + $this->getHiddenTaxAmount() * $this->getQtyCanceled()/$this->getQtyOrdered());
}
return $this;
}
你看到有在事件發出後沒有額外的檢查,但可以將qty_to_cancel
屬性設置爲0
以不影響取消。
你的觀察方法:
public function salesOrderItemCancel(Varien_Event_Observer $observer)
{
$item = $observer->getEvent()->getItem();
if (!$this->_isCancellable($item->getOrder())) {
$item->setQtyToCancel(0);
$this->_showErrorMessage();
}
}
注意,您不必設置tax_canceled
或hidden_tax_canceled
因爲它們依賴於qty_canceled
,因此將保持0
你的意思是要停止任何其他觀察員在你之後處理事件? – Andrew 2013-05-10 10:38:19
號我想,當觀察者發現任何事件,在此之前的事件執行,觀察者檢查一定條件下,可以停止執行該事件。 (例如: - 使用在for循環或while循環「破」的) – Gurpreet 2013-05-10 17:59:08