Можна реалізувати основну логіку з невеликим спеціальним кодом:
Напишіть спостерігача controller_predispatch_customer_account_loginPost
, перевірте, чи розміщена адреса електронної пошти ( username
) не схожа на електронну адресу. У цьому випадку знайдіть клієнта за номером клієнта та замініть поле ім’я користувача у даних POST фактичною електронною адресою знайденого клієнта.
Приклад коду спостерігача:
$request = $observer->getControllerAction()->getRequest();
$username = $request->getPost('username');
if (false === strpos($username, '@')) {
$customer = Mage::getModel('customer/customer')
->getCollection()
->addAttributeToFilter('customer_number', $username)
->getFirstItem();
if ($customer && $customer->getEmail()) {
$request->setPost('username', $customer->getEmail());
}
}
Потім controller_postdispatch_customer_account_loginPost
замініть електронну адресу сесії назад на номер клієнта, якщо він встановлений. Інакше повідомлення про помилки на невдалому вході замість номера міститимуть електронну адресу.
Приклад коду спостерігача:
$emailAddress = Mage::getSingleton('customer/session')->getUsername();
if ($emailAddress) {
$customerNumber = Mage::getModel('customer/customer')->loadByEmail($emailAddress)
->getCustomerNumber();
}
Mage::getSingleton('customer/session')->setUsername($customerNumber);
Інші речі, які слід врахувати:
- Застосовуйте ту саму логіку до форми "забутий пароль"
- Вирішіть, чи хочете ви використовувати вбудований в
increment_id
якості номера клієнта, який ви можете ввімкнути в конфігурації системи в розділі Конфігурація клієнта> Створити нові параметри облікового запису> Створити дружній ідентифікатор клієнта