Меню

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

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

При создании заказа покупатель заполняет поле "ФИО". Необходимо скопировать эти данные в профиль пользователя (не путать с профилем покупателя) разбив на отдельные поля.
По этой заметке. В Вашем примере ФИО в заказе хранится в одном поле. В моём случае в заказе используются 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);
Форма ответов
 
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
Загрузить файлы
 

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

Добавление и удаление из сравнения на AJAX: Битрикс

Рецепт лежал у меня в закромах, почти о нем и забыл, но тут подвернулся под руку- решил опубликовать. Скажу сразу, данно...

Заполнение габаритов товара, после обмена с 1С, из свойств элемента инфоблока.

Если Ваш интернет-магазин интегрирован с 1С, скорее всего столкнулись с такой проблемой: 1С не умеет выгружать параметры...

Определить местоположение пользователя и показать на карте

Задача определить местоположение текущего пользователя и показать его на карте, с меткой. Сделать можно с помощью класса...

Настройка: Redis кеширование для 1С-Битрикс, под Ubuntu

Задача: имеем полностью настроенный и оптимально сконфигурированный веб-сервер под управлением Ubuntu 20.04 на котором з...

Если папка то применяем, проверка текущего раздела или подраздела

Иногда требуется применить особый стиль к определённой директории сайта или управлять выводом элементов на странице в за...

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

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

Фотогалерея на базе компонента новостей, с fancybox.

Это заметка обновление к очень старой, уже имеющейся на сайте. Сделаем что-то типа фотогалереи на базе встроеннного в би...

Получение SEO данных элементов и разделов инфоблока, через API 1С-Битрикс

Для того чтобы извлечь данные из вкладки SEO административной панели Битрикс, необходимо использовать специализированные...

Номера страниц в Title и Description при постраничной навигации каталога

Задача: Часто SEO-специалисты просят добавить номер страницы, из постраничной навигации, в заголовок и описание раздела ...