观察者可以打破Magento的活动吗?

时间:2013-05-10 10:09:10

标签: php magento

我是Magento的新手。我想构建一个观察者,在取消订单时会对我的数据库执行查询,并决定订单是否可以取消(这是根据某个州决定的)。如果无法取消,则应该中断取消事件并显示订单无法取消的消息。

我应该选择哪个事件,order_cancel_aftersales_order_item_cancel,以及如何在这两个事件之间突破这个事件?

提前致谢。 :)

1 个答案:

答案 0 :(得分:2)

对此没有一般性的答案,这取决于触发事件的背景以及事后发生的事情。

事件没有“停止”它们的界面,它们与名称之外的实际“事件”(即订单取消)无关。

因此,您必须查看触发Mage_Sales_Model_Order_Item的{​​{1}}代码(sales_order_item_cancel显然是错误的地方,因为此时订单已被取消):

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,因此会保持为0.