Для того чтобы проверить наличие пользователя в системе нужно сделать скрытый AJAX запрос.
Как проверить есть ли уже пользователя в Битриксе
Проверять будем по email-адресу. Его и будем передавать. Это может быть форма обратной связи, окно авторизации или даже оформление заказа.
Давайте напишем код:
if (!$USER->IsAuthorized()): endif;
Весь код можно поместить между этой проверкой – зачем нам проверять авторизованных? 🙂
Пишем далее запрос на jQuery, и передаем значение из поля:
$('body').on('blur', '#soa-property-2', function(){ var $val = $(this).val(); if ($val != false) { $.ajax({ url: '/local/templates/template.2020/components/bitrix/sale.order.ajax/order/ajax_email_check.php', type: 'post', cache: false, data: {'email': $val}, }).done(function(data){ if (data != false) alert('Ваш email уже есть в базе. Пожалуйста, авторизуйтесь!'); }).error(function(){ console.log('There was an error'); }); } return false; });
Этот код сработает, когда вы перестанете вводить емейл и перейдете к другому полю.
#soa-property-2 – id нашего input.
Теперь посмотрим как выглядит код получения емейла из базы:
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); $email = $_REQUEST['email']; $filter = Array("=EMAIL" => $email); $sql = CUser::GetList(($by="id"), ($order="desc"), $filter); if($sql->NavNext(true, "f_")) { $id_user = $f_ID; echo $id_user; }
Возвращаем ID если он есть. Таким образом, можно проверить зарегистрирован ли пользователь у вас на сайте, и, например, попросить его пройти авторизацию, вместо дублирования данных. Стандартно в Битриксе такого механизма (насколько я знаю) нет, но он бы очень пригодился.
А как бы вы использовали такую проверку на проектах?