Можно реализовать базовую логику с небольшим количеством пользовательского кода:
Напишите наблюдателю 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
номер клиента, который можно включить в конфигурации системы в разделе « Конфигурация клиента»> «Создать параметры новой учетной записи»> «Создать удобный для пользователя идентификатор клиента».