첫 번째 시작 위치는 sales_order_save_after
입니다. 이것은 확실히 작동하지만 주문이 업데이트되고 저장 될 때마다 호출됩니다. 따라서 로직은 주문이 새로 생성 된 시점을 즉시 완료해야하며, 주문이 나중에 완료로 표시되는 경우 (후자가 가장 일반적 임) 고려해야합니다.
/**
* Update customer attribute when order is completed.
*
* Need to catch two conditions:
* 1) Order is new AND `status` = complete
* 2) Order exists but `status` is changed to complete
*
* @param $obs Varien_Event_Observer
*/
public function adjustCustomerAfterComplete($obs)
{
/* @var $order Mage_Sales_Model_Order */
$order = $obs->getOrder();
if ($order->getStatus() === $order::STATE_COMPLETE
&& $order->getOrigData('status' !== $order::STATE_COMPLETE))
{
Mage::getModel('customer/customer')
->load($order->getCustomerId())
->setCustomAttr('new val') //custom attr code
->save();
//Another approach if you don't need events, etc.:
/*
$obj = new Varien_Object(
array(
'entity_id'=>$order->getCustomerId(),
'custom_attr'=>'new val'
)
);
Mage::getResourceModel('customer/customer')
->saveAttribute($obj,'custom_attr');
*/
}
}
어떤 이벤트가 효과가 없었습니까? 아니요. 어떤 이벤트를 시도 했습니까? – benmarks
@benmarks 주문 상태가 완료된 후에 실행되는 이벤트를 찾지 못했습니다. 나는 "sales_order_payment_pay"를 시도했다. 그러나 지불이 완료되지 않은 후에 주문이 완료되었다. –