的Config.xml
<sales_order_save_after>
<observers>
<iula_crm_order_observer>
<type>singleton</type>
<class>iula_Crm_Model_Order_Observer</class>
<method>sales_order_save_after_crm</method>
</iula_crm_order_observer>
</observers>
Observer.php
public function sales_order_save_after_crm(Varien_Event_Observer $observer){
// call api
}
您好,
我的observer.php中有上面的代码,我需要运行此代码,但发票生成除外。这位观察员也在打电话发票,有没有办法检查这个。
答案 0 :(得分:4)
不幸的是,每次保存订单时都会调用此事件,即下订单,更改状态,开票,发货等
如果您需要调用观察员而不包括发票创建,那么您需要调度自己的事件以隐藏在要监听的操作中。
答案 1 :(得分:0)
您可以做的是检查发票保存的时间(更新)。如果在过去15年内更新了发票,则不要处理您的代码(api调用)。什么时候不处理。您可以将15s修改为任何数字,当然适合您。
要归档此内容,您需要修改如下代码:
<?php
public function sales_order_save_after_crm(Varien_Event_Observer $observer) {
try {
$order=$observer->getOrder();
$time = time(); //get current time
$process = true;
foreach ($order->getInvoiceCollection() as $invoice) {
$date = null;
$date = $invoice->getUpdatedAt(); //get invoice updated time
$timedifference = $time - strtotime($date);
if ($timedifference < 15):
$process = false; //Stop processing when invoice was updated in the last 15s
endif;
}
if ($process) {
//call api
}
} catch (Exception $e) {
}
}
?>
另一个解决方案是,找到另一个事件,当你需要它时会调用什么,但我认为你已经尝试过了。