Телеграм: @camouf_ru Почта: mihail@bazarow.ru

Скопировать номер телефона из поля пользователя в телефон для регистрации

Просмотров: 687

Задача, на конкретном сайте: раньше все пользователи регистрировались по стандартному режиму, через логин(e-mail) и пароль. При этом, у всех пользователей запрашивался и номер телефона, который записывался в стандартное поле "Номер телефона", он же PERSONAL_MOBILE.

Необходимо перевести всех пользователей на вход по номеру телефона, с отправкой смс с паролем.

Что бы не напрягать существующих пользователей просто скопируем номера телефонов из PERSONAL_MOBILE в новое поле (которое доступно в свежих редакциях Битрикс, создавать его не надо) Номер телефона для регистрации он же PHONE_NUMBER

Получаем информацию о пользователях через API

Для начала, нам нужно получить информацию о пользователях, с помощью CUser::GetList - Возвращает список пользователей в виде объекта класса CDBResult. Статический метод.

По идее, нам нужено только поле PERSONAL_MOBILE, но покажу как вывести вообще всю информацию о пользователях, отсортированных по ID пользователя.

$data = CUser::GetList(($by="ID"), ($order="ASC"),
    array(
     'ACTIVE' => 'Y', // Выбрали всех активных
    )
);
while($arUser = $data->Fetch()) {
   echo '<pre>';
   	print_r($arUser);
   echo '</pre>';
}

В распечатке $arUser увидем вообще всю информацию о каждом пользователе (ФИО, дату регистрации, все персональные данные итд).

Нам достаточно, с помощью метода CUser::Update обновить поле PHONE_NUMBER из поля PERSONAL_MOBILE

$data = CUser::GetList(($by="ID"), ($order="ASC"),
    array(
     'ACTIVE' => 'Y',
    )
);
while($arUser = $data->Fetch()) {
    $user = new CUser;
    $fields = Array(
        "PHONE_NUMBER"  => $arUser['PERSONAL_MOBILE'],
    );
    $user->Update($arUser['ID'], $fields);
}

Здесь мы вписали номер телефона "PHONE_NUMBER" => $arUser['PERSONAL_MOBILE'], и измениили параметры пользователя.

Получить номер телефона из последнего заказа пользователя

Если, вы ни когда не справшивали номер телефона пользователя, можно попоробовать скопировать его из заказа, если пользователь хотя бы раз делал заказ в интернет магазине.

Для начала, получим самый свежий заказ каждого пользователя, скорее всего в нем актуальный номер телефона в свойстве "Номер телефона". Делать будем старым методом, так как на D7 все работает гораздо медленеее.

CModule::IncludeModule("sale");
$data = CUser::GetList(($by="ID"), ($order="ASC"),
    array(
        'ACTIVE' => 'Y', // Выбрали всех активных
    )
);
while($arUser = $data->Fetch()) {
    $db_sales = CSaleOrder::GetList(
        array('DATE_INSERT' => 'DESC'),
        array("USER_ID" => $arUser['ID']),
        array('ID')
    );
    while ($ar_sales = $db_sales->Fetch())
    {
        $dbOrderProps = CSaleOrderPropsValue::GetList(
            array("SORT" => "ASC"),
            array("ORDER_ID" => $ar_sales['ID'], "CODE"=>array("PHONE"))
        );
        while ($arOrderProps = $dbOrderProps->GetNext()) {
            $userOrderPhone = $arOrderProps['VALUE'];
        }
        break;
    }
    $user = new CUser;
    $fields = Array(
        "PHONE_NUMBER"  => $userOrderPhone,
    );
    $user->Update($arUser['ID'], $fields);
}

Пояснения:

  • Все также с CUser::GetList прошлись по пользователям. Теперь нам нужны только их ID.
  • Внутри цикла пользователя воспользовались CSaleOrder::GetList получили заказы пользователя, при этом отфильтровали по дате создания (от новых к старым) 'DATE_INSERT' => 'DESC'. В отборе использовали только ID заказа array('ID') - другие данные нам не нужны и весь скрипт отработает быстрее.
  • В конце цикла, перебора заказов пользователя, оборвали его с помощью break, что бы получить только один заказ, а не все заказы пользователя. )
  • Внутри заказа, зная его ID "ORDER_ID" => $ar_sales['ID'] получили (методом CSaleOrderPropsValue::GetList) значение свойства с телефоном, в моем случае это поле с кодом "CODE"=>array("PHONE")
  • Передали VALUE с номером телефона в переменную $userOrderPhone
  • Дальше, все также, как и в статье выше, обновили номер для регистрации методом CUser::Update
На этом все, вопросы прошу задавать в комментариях. Для работы с заказом специально не использовал D7 - так как возможностей там больше, по работе с заказами- но они работают медленнее, для конкретно этой, описанной в статье ситуации (нужно получать коллекции свойств и грузить классы заказа \Bitrix\Sale\Order)

Но, можете попробовать перевести все это на D7 и написать в комментарии и не плохая практика и возможно, кому-то будет полезно.

Написать первый комментарий:

Перетащите файлы
Ничего не найдено
Защита от автоматических сообщений
Нажимая кнопку "Отправить" вы соглашаетесь
с политикой конфиденциальности и обработки персональных данных.

Записная книжка разработчика

Примерно с 2013-го года пишу заметки по разработке сайтов на Битрикс.
Вы можете задавать уточняющие вопросы в комментариях- отвечаю или дополняю заметки по возможности.

Добавление и удаление из сравнения на AJAX: Битрикс Просмотров: 16378 Рецепт лежал у меня в закромах, почти о нем и забыл, но тут подвернулся под руку- решил оп... Определить местоположение пользователя и показать магазины поблизости... Просмотров: 479 Задача: в мобильном приложении, которое открывает сайт на 1С-Битрикс внутри себя, нужно оп... XML в формате Commerce ML-2, города России и Мира, для выгрузки в инф... Просмотров: 5827 Подвернулась задачка, создать инфоблок для Битрикс, в котором будут просто города России и... Ссылки для добавления и удаления товара из сравнения в Битрикс Просмотров: 7667 Просто оставляю это здесь, вставка ссылок на добавление и удаление товара из сравнения, ес... Получить все товары из всех заказов пользователя. История купленных т... Просмотров: 668 Задача: нужно создать раздел, в персональном разделе пользователя, с историей всех купленн... Настройка выгрузки товаров в Яндекс Маркет с сайта Битрикс Просмотров: 35235 Настройка выгрузки в Яндекс маркет в формате yml, выполняется достаточно просто, кроме одн... Малая корзина Битрикс, упрощенный шаблон Просмотров: 11924 Шаблон малой корзины битрикс, который можно вывести в боковом разделе шаблона или в шапке ... Если товар в корзине, поменять значение input на "В корзине" Просмотров: 9402 Если Вам нужно поменять текст на кнопке, добавляющей товар в корзину, достаточно воспользо... Добавление в избранное или отложенные, на AJAX из карточки товара Просмотров: 25477 В этой заметке рассакажу как добавлять товары в "Отложенные", для иммитации функционала "И... Вывести информацию, только на первом уровне раздела каталога, в 1С-Би... Просмотров: 3098 Задача: на сайте, в каталоге, выводится два фильтра - боковой и верхний. Оба компонента по...