Для авторизации по номеру телефона необходимо добавить соответствующее поле. Как это можно сделать рассказано в предыдущей статье.
По умолчанию в Presta Shop пользователи проходят авторизацию по E-mail. Зачастую это не удобно, и тогда возникает потребность в индентификации с помощью номера телефона. Чтобы проделать такого вида работ нам понадобится функция «Overrides», способная изменить стандартное поведение Presta Shop.
В папке по адресу /override/classes/form/ создадим файл CustomerLoginFormatter.php, отвечающий за вывод формы авторизации, и зададим ему класс.
class CustomerLoginFormatter extends CustomerLoginFormatterCore
Далее подкорректируем код,
'email' => (new FormField)
->setName('phone')
->setType('text')
->setRequired(true)
->setLabel($this->translator->trans(
'Phone', [], 'Shop.Forms.Labels'
))
->addConstraint('isPhoneNumber'),
Что позволит покупателю ввести телефонный номер и не валидировать данное поле, как E-mail.
Последнее действие заключается в переопределении класса Customer.php, а именно метода getByEmail, ответственного за
индентификации пользователя на сайте.
if (!Validate::isPhoneNumber($email) || ($plaintextPassword && !Validate::isPasswd($plaintextPassword))) {
die(Tools::displayError());
}
И сравнение логина в SQL запросе.
$sql->where('c.phone
= ''.pSQL($email).''');
Поздравляем! Теперь пользователь может выполнить вход в личный кабинет интернет-магазина по номеру телефона.