Меню

Заполнить поля пользователя из свойства заказа, на примере ФИО

Заполнить поля пользователя из свойства заказа, на примере ФИО

При создании заказа покупатель заполняет поле "ФИО". Необходимо скопировать эти данные в профиль пользователя (не путать с профилем покупателя) разбив на отдельные поля.
По этой заметке. В Вашем примере ФИО в заказе хранится в одном поле. В моём случае в заказе используются 3 раздельных поля - Фамилия, Имя и Отчество (так удобнее передавать данные в транспортные компании, особенно в Почту России).

Необходимо Фамилию, Имя и Отчество из заказа передавать в соответствующие поля пользователя.


По заметке https://bazarow.ru/blog-note/12877/. С ней всё хорошо, код работает, в поле ФИО (единое) в заказе записываются данные из полей Фамилия, Имя и Отчество.
Но так как мы и в той и этой заметке редактируем файл confirm.php, хочется объединить эти две заметки в одну, то есть:
- в заказе есть три поля - Фамилия, Имя и Отчество
- в единое поле ФИО заказа записываем их вместе, делаем названием профиля
- данные из полей Фамилия, Имя и Отчество копируем в соответствующие поля пользователя (если не заполнены)
Как-то так. Проверить негде делал не глядя) но вроде бы ошибки быть не должно.
Код
// Заполняем единное поле ФИО в заказе
$order = \Bitrix\Sale\Order::load($arResult["ORDER"]['ID']);
$collection = $order->getPropertyCollection();
$dbRes = \Bitrix\Sale\PropertyValueCollection::getList([
    'select' => ['ID', 'NAME', 'CODE', 'VALUE'],
    'filter' => [
        '=ORDER_ID' => $arResult["ORDER"]['ID']
    ]
]);
while ($item = $dbRes->fetch())
{
    if ($item['CODE'] == 'FAMILIA') {
        $fullname .= $item['VALUE'] . ' ';
    }

    if ($item['CODE'] == 'NAME') {
        $fullname .= $item['VALUE'] . ' ';
    }

    if ($item['CODE'] == 'OTCHESTVO') {
        $fullname .= $item['VALUE'] . ' ';
    }

    if ($item['CODE'] == 'FULL_NAME') {
        $propertyValue = $collection->getItemById($item['ID']);
        $r = $propertyValue->setField('VALUE', $fullname);
    }
}
$order->save();

// А пользователю заполняем по отдельности
// Бъем строку на массив по пробелу
$arFullname = explode(' ', $fullname);
$user = new CUser;
$fields = array(
    "LAST_NAME" =>$arFullname['0'],
    "NAME" => $arFullname['1'],
    "SECOND_NAME" => $arFullname['2'],
);
$user->Update($arResult['ORDER']['USER_ID'], $fields);

Или можно не использовать explode, просто выше (в while ($item = $dbRes->fetch())) заполнить переменные для заполнения пользователя
Варик без explode
Код
// Заполняем единное поле ФИО в заказе
$order = \Bitrix\Sale\Order::load($arResult["ORDER"]['ID']);
$collection = $order->getPropertyCollection();
$dbRes = \Bitrix\Sale\PropertyValueCollection::getList([
    'select' => ['ID', 'NAME', 'CODE', 'VALUE'],
    'filter' => [
        '=ORDER_ID' => $arResult["ORDER"]['ID']
    ]
]);
while ($item = $dbRes->fetch())
{
    if ($item['CODE'] == 'FAMILIA') {
        $familia = $item['VALUE'] . ' ';
    }

    if ($item['CODE'] == 'NAME') {
        $name = $item['VALUE'] . ' ';
    }

    if ($item['CODE'] == 'OTCHESTVO') {
        $otchestvo = $item['VALUE'] . ' ';
    }

    if ($item['CODE'] == 'FULL_NAME') {
        $fullname = $familia  . ' ' .  $name  . ' ' .  $otchestvo;
        $propertyValue = $collection->getItemById($item['ID']);
        $r = $propertyValue->setField('VALUE', $fullname);
    }
}
$order->save();

// А пользователю заполняем по отдельности
$user = new CUser;
$fields = array(
    "LAST_NAME" =>$familia,
    "NAME" => $name,
    "SECOND_NAME" => $otchestvo,
);
$user->Update($arResult['ORDER']['USER_ID'], $fields);
Видеоуроки по
1С-Битрикс
на моем Boosty канале Видео
Форма ответов
 
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
Загрузить файлы
 

Блог-note: заметки разработчика

Помечаем новинки лейблом в каталоге битрикс

Достаточно часто, при разработке каталога товаров или интернет магазина на системе управления Битрикс, встает задача как...

Показать пользователей онлайн на странице сайта

Задача: показать на странице сайта пользователей которые сейчас находятся на сайте. Используется штатный модуль "Ве...

Быстрая отписка от всех рассылок модуля "E-mail маркетинг", в кабинете пользователя

Задача: дать пользователям возможность отписаться от всех рассылок "E-mail маркетинга", не только по ссылке из...

Ссылка и название раздела в списке новостей Битрикс

Если нужно вывести название раздела инфоблока в котором находится конкретный элемент/новость в компоненте "списк новосте...

Настройка прав доступа в 1С-Битрикс

Часто, в интернет-магазине под управлением 1С Битрикс, нужно создать группу пользователей со специфическими правами. Нап...

Подключение jquery из ядра битрикс и объединение своих скриптов в один файл

Если используете большое количество js скриптов на сайте. Например: фансибокс, всяческие галереи и прочее- то таких внеш...

Запретить указание количества товаров, добавляемого в корзину, в определенных разделах каталога.

Задача состоит в том, чтобы запретить указание количества товара, добавляемого в корзину, в определенных разделах катало...

Спойлер в списке новостей 1С-Битрикс

Иногда нужно сделать спойлеры в копонентах 1C-Битрикс, в основном конечно, имеет смысл при очень больших обьемах контент...

Как работает система сертификации партнеров 1С-Битрикс, уровни партнеров и специалистов

Сертификация от «1С-Битрикс» – это объективная оценка знаний и практических навыков разработки проектов на платформе от ...