2011-11-30 41 views
0

在我的一個項目中,我需要能夠與別人的地址下訂單。所以我已經做了一些修改,以便能夠在結帳時在我的地址列表中顯示其他客戶的地址。一切工作正常,唯一的問題是,當訂單完成後,地址轉移給我,另一位客戶無法再訪問此地址。Magento:在結帳時使用別人的地址

所以我假設有一些像地址 - > setCustomer($ myId)發生在某處。 我評論此行的客戶/模型/ customer.php:

public function getAddressesCollection() 
{ 
    if (is_null($this->_addressesCollection)) { 
     $this->_addressesCollection = $this->getAddressCollection() 
      ->setCustomerFilter($this) 
      ->addAttributeToSelect('*'); 
     foreach ($this->_addressesCollection as $address) { 
      //$address->setCustomer($this); 
     } 
     // My call to add other customer's address to the list here 
    } 

    return $this->_addressesCollection; 
} 

而且我在同樣的功能添加像這樣加入其他客戶的地址: $這個 - > getAddressesCollection() - >的addItem ($ customer_address); 但是評論此行「$ address-> setCustomer($ this);」似乎沒有辦法...

任何想法?

謝謝!

回答

0

我發現的唯一解決方案是強制引用客人報價。它似乎沒有改變結帳過程中的任何內容,訂單被分配給用戶,並按正常預期出現在訂單列表(客戶端和管理端)中。

所以,據我測試,prepareGuestQuote做與prepareCustomerQuote相同的事情,唯一的區別是它不會將選定的地址分配給當前客戶,所以它似乎解決了我的問題。

在saveOrder()函數/checkout/model/type/onepage.php,改變這種:

switch ($this->getCheckoutMethod()) { 
     case self::METHOD_GUEST: 
      $this->_prepareGuestQuote(); 
      break; 
     case self::METHOD_REGISTER: 
      $this->_prepareNewCustomerQuote(); 
      $isNewCustomer = true; 
      break; 
     default: 
      $this->_prepareCustomerQuote(); 
      break; 
} 

此:

$this->_prepareGuestQuote(); 

我敢肯定,它不是「最好的「解決方案,但它是我發現現在唯一可行的解​​決方案。