2012-08-01 71 views
0

我的要求,當客戶註冊電子郵件存在驗證是magento的默認功能,但我們應該允許重複的電子郵件。允許magento客戶的重複電子郵件登記

我正在使用用戶名(而不是電子郵件)登錄到magento商店的自定義模塊。

所以您的自定義應該支持與前端註冊/更新用重複的電子郵件,後端(管理面板)註冊/更新用,從客戶的CSV文件導入,以及創建用戶自V2_API註冊。

請回復我一些很好的解決方案,如果可能的話。 任何幫助,不勝感激。提前致謝。

+0

我知道很多網站允許多個帳戶註冊到同一個電子郵件地址。除非真的有必要讓客戶擁有更多賬戶,否則我不會經歷混亂局面。 – 2012-08-01 09:08:51

回答

2

Magento在Mage_Customer_Model_Resource_Customer類中檢查了重複的客戶電子郵件。看看它。你會發現這個功能。

protected function _beforeSave(Varien_Object $customer) 
{ 
    parent::_beforeSave($customer); 

    if (!$customer->getEmail()) { 
     throw Mage::exception('Mage_Customer', Mage::helper('customer')->__('Customer email is required')); 
    } 

    $adapter = $this->_getWriteAdapter(); 
    $bind = array('email' => $customer->getEmail()); 

    $select = $adapter->select() 
     ->from($this->getEntityTable(), array($this->getEntityIdField())) 
     ->where('email = :email'); 
    if ($customer->getSharingConfig()->isWebsiteScope()) { 
     $bind['website_id'] = (int)$customer->getWebsiteId(); 
     $select->where('website_id = :website_id'); 
    } 
    if ($customer->getId()) { 
     $bind['entity_id'] = (int)$customer->getId(); 
     $select->where('entity_id != :entity_id'); 
    } 

    $result = $adapter->fetchOne($select, $bind); 
    if ($result) { 
     throw Mage::exception(
      'Mage_Customer', Mage::helper('customer')->__('This customer email already exists'), 
      Mage_Customer_Model_Customer::EXCEPTION_EMAIL_EXISTS 
     ); 
    } 

    // set confirmation key logic 
    if ($customer->getForceConfirmed()) { 
     $customer->setConfirmation(null); 
    } elseif (!$customer->getId() && $customer->isConfirmationRequired()) { 
     $customer->setConfirmation($customer->getRandomConfirmationKey()); 
    } 
    // remove customer confirmation key from database, if empty 
    if (!$customer->getConfirmation()) { 
     $customer->setConfirmation(null); 
    } 

    return $this; 
} 

如果您打算允許重複的客戶電子郵件,您可以註釋掉此代碼。

$adapter = $this->_getWriteAdapter(); 
    $bind = array('email' => $customer->getEmail()); 

    $select = $adapter->select() 
     ->from($this->getEntityTable(), array($this->getEntityIdField())) 
     ->where('email = :email'); 
    if ($customer->getSharingConfig()->isWebsiteScope()) { 
     $bind['website_id'] = (int)$customer->getWebsiteId(); 
     $select->where('website_id = :website_id'); 
    } 
    if ($customer->getId()) { 
     $bind['entity_id'] = (int)$customer->getId(); 
     $select->where('entity_id != :entity_id'); 
    } 

    $result = $adapter->fetchOne($select, $bind); 
    if ($result) { 
     throw Mage::exception(
      'Mage_Customer', Mage::helper('customer')->__('This customer email already exists'), 
      Mage_Customer_Model_Customer::EXCEPTION_EMAIL_EXISTS 
     ); 
    } 

或者您最好重寫客戶資源。我自己建議你重寫它。希望這可以幫助。

相關問題