Trong cuộc gọi sau:
Mage_Sales_Model_Service_Quote :: submitOrder
Mage::dispatchEvent('checkout_type_onepage_save_order', array('order'=>$order, 'quote'=>$quote));
Chúng tôi có hai thực thể có giá trị customer_id. Khi chúng tôi có khách hàng hiện tại - sau đó $order->getCustomerId()
sẽ trả lại ID thật của nó . Nếu khách hàng chỉ được tạo - thì nó trả về đúng .
Vì vậy, nếu bạn muốn áp dụng một cái gì đó để đặt hàng dựa trên khách hàng (là mới / cũ) chạy trong trình quan sát:
if ($observer->getOrder()->getCustomerId() === true) {
//here goes code for customer, which was just created
} elseif ($observer->getOrder()->getCustomerId() > 0) {
//here goes code for old customer
} elseif ($observer->getOrder()->getCustomerId() === null) {
//here goes code for guest
}
Giải trình:
Mage_Checkout_Model_Type_Onepage :: saveOrder
/**
* Create order based on checkout type. Create customer if necessary.
*
* @return Mage_Checkout_Model_Type_Onepage
*/
public function saveOrder()
{
$this->validate();
$isNewCustomer = false;
switch ($this->getCheckoutMethod()) {
case self::METHOD_GUEST:
$this->_prepareGuestQuote();
break;
case self::METHOD_REGISTER:
$this->_prepareNewCustomerQuote();
$isNewCustomer = true;
break;
default:
$this->_prepareCustomerQuote();
break;
}
Chúng ta hãy xem ba phương thức được bảo vệ: _prepareGuestQuote (), _prepareNewCustomerQuote (), _prepareCustomerQuote ()
/**
* Prepare quote for guest checkout order submit
*
* @return Mage_Checkout_Model_Type_Onepage
*/
protected function _prepareGuestQuote()
{
$quote = $this->getQuote();
$quote->setCustomerId(null)
Như bạn có thể thấy khách hàng có giá trị null
/**
* Prepare quote for customer registration and customer order submit
*
* @return Mage_Checkout_Model_Type_Onepage
*/
protected function _prepareNewCustomerQuote()
{
...
$quote->setCustomer($customer)
->setCustomerId(true);
}
Đối với khách hàng mới, chúng tôi đang thiết lập đúng
/**
* Prepare quote for customer order submit
*
* @return Mage_Checkout_Model_Type_Onepage
*/
protected function _prepareCustomerQuote()
{
$quote = $this->getQuote();
$billing = $quote->getBillingAddress();
$shipping = $quote->isVirtual() ? null : $quote->getShippingAddress();
$customer = $this->getCustomerSession()->getCustomer();
...
$quote->setCustomer($customer);
}
Đối với khách hàng hiện tại, chúng tôi sẽ lấy đối tượng của nó từ phiên. Như bạn hiểu - đối tượng này sẽ có giá trị customer_id.