0

私の要件は、顧客が電子メールの存在検証を登録しているとき、magento のデフォルト機能ですが、重複した電子メールを許可する必要があります。

ユーザー名(電子メールではなく)でmagentoストアにログインするためのカスタムモジュールを使用しています。

そのため、カスタマイズでは、フロント エンドの登録/更新、バック エンド (管理パネル) の登録/更新、顧客の CSV ファイルからのインポート、および V2_API からのユーザーの作成で、重複した電子メールによる登録をサポートする必要があります。

可能であれば、詳細な解決策を返信してください。どんな助けでも大歓迎です。前もって感謝します。

4

1 に答える 1

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
        );
    }

または、顧客リソースを書き直した方がよいでしょう。私自身、書き直すことをお勧めします。お役に立てれば。

于 2012-08-01T08:49:30.163 に答える