เป็นไปได้ที่จะใช้ตรรกะพื้นฐานด้วยรหัสที่กำหนดเองเล็กน้อย:
เขียนสังเกตการณ์การ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
เป็นหมายเลขลูกค้าหรือไม่ซึ่งคุณสามารถเปิดใช้งานในการกำหนดค่าระบบภายใต้การกำหนดค่าลูกค้า> สร้างตัวเลือกบัญชีใหม่> สร้างรหัสลูกค้าที่เป็นมิตรกับมนุษย์