Dimungkinkan untuk menerapkan logika dasar dengan sedikit kode khusus:
Tulis pengamat untuk controller_predispatch_customer_account_loginPost
, periksa apakah alamat email yang diposting ( username
) tidak terlihat seperti alamat email. Dalam hal ini, cari pelanggan dengan nomor pelanggan dan ganti bidang nama pengguna dalam data POST dengan alamat email sebenarnya dari pelanggan yang ditemukan.
Contoh kode pengamat:
$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());
}
}
Lalu controller_postdispatch_customer_account_loginPost
, ganti alamat email di sesi kembali ke nomor pelanggan, jika sudah diatur. Kalau tidak, pesan kesalahan pada login gagal akan berisi alamat email, bukan nomor.
Contoh kode pengamat:
$emailAddress = Mage::getSingleton('customer/session')->getUsername();
if ($emailAddress) {
$customerNumber = Mage::getModel('customer/customer')->loadByEmail($emailAddress)
->getCustomerNumber();
}
Mage::getSingleton('customer/session')->setUsername($customerNumber);
Hal-hal lain yang perlu dipertimbangkan:
- Terapkan logika yang sama ke formulir "lupa kata sandi"
- Putuskan apakah Anda ingin menggunakan
increment_id
nomor pelanggan bawaan, yang dapat Anda aktifkan dalam konfigurasi sistem di bawah Konfigurasi Pelanggan> Buat Opsi Akun Baru> Hasilkan ID Pelanggan yang Ramah Manusia