Es posible implementar la lógica básica con poco código personalizado:
Escriba un observador para controller_predispatch_customer_account_loginPost
, verifique si la dirección de correo electrónico publicada ( username
) no parece una dirección de correo electrónico. En este caso, busque al cliente por número de cliente y reemplace el campo de nombre de usuario en los datos POST con la dirección de correo electrónico real del cliente encontrado.
Ejemplo de código de observador:
$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());
}
}
Luego controller_postdispatch_customer_account_loginPost
, reemplace la dirección de correo electrónico en la sesión nuevamente con el número de cliente, si está configurado. De lo contrario, los mensajes de error en los inicios de sesión fallidos contendrán la dirección de correo electrónico en lugar del número.
Ejemplo de código de observador:
$emailAddress = Mage::getSingleton('customer/session')->getUsername();
if ($emailAddress) {
$customerNumber = Mage::getModel('customer/customer')->loadByEmail($emailAddress)
->getCustomerNumber();
}
Mage::getSingleton('customer/session')->setUsername($customerNumber);
Otras cosas a considerar:
- Aplicar la misma lógica al formulario "Olvidé mi contraseña"
- Decida si desea utilizar el
increment_id
número de cliente integrado , que puede habilitar en la configuración del sistema en Configuración del cliente> Crear nuevas opciones de cuenta> Generar ID de cliente amigable para el ser humano