Im folgenden Ereignis anrufen:
Mage_Sales_Model_Service_Quote :: submitOrder
Mage::dispatchEvent('checkout_type_onepage_save_order', array('order'=>$order, 'quote'=>$quote));
Wir haben zwei Entitäten mit dem Wert customer_id. Wenn wir einen bestehenden Kunden haben, $order->getCustomerId()
wird der echte Ausweis zurückgegeben . Wenn der Kunde gerade erstellt wurde, gibt er true zurück .
Wenn Sie also etwas auf Bestellung basierend auf dem Kunden (neu / alt) anwenden möchten, führen Sie den Beobachter aus:
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
}
Erläuterung:
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;
}
Schauen wir uns drei geschützte Methoden an: _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)
Wie Sie sehen können, hat der Gastkunde den Wert Null
/**
* Prepare quote for customer registration and customer order submit
*
* @return Mage_Checkout_Model_Type_Onepage
*/
protected function _prepareNewCustomerQuote()
{
...
$quote->setCustomer($customer)
->setCustomerId(true);
}
Für Neukunden setzen wir wahr
/**
* 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);
}
Für bestehende Kunden nehmen wir das Objekt aus der Sitzung. Wie Sie verstehen, hat dieses Objekt den Wert customer_id.