Меню

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

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

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

Получение доступа к железу устройства из Битрикс мобильное приложение

Документация к мобильному приложению 1С-Битрикс очень куцая. В основном описывает функционал добавляемый BXMobileApp. ...

Вывод элементов с помощью API битрикс

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

Изменить размер картинок по ID файла, в 1C-Битрикс

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

Вывести общее количество товаров в шаблоне корзины 1С-Битрикс

Задача: вывести общее количество товаров в корзине (именно количество единиц товара, а не позиций). При этом да...

Как добавить режим редактирования элементов в собственном компоненте Битрикс

Задача: добавить режим редактирования и удаления элементов в собственном компоненте.

Дополнительные опции/услуги, добавляемые в корзину, в карточке товаров

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

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

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

Обновление 1С-Битрикс с PHP 7, до поддержки версии PHP 8.3

Задача: обновить устаревший сайт на платформе 1С-Битрикс, который не получал обновлений уже более 4 лет и работает на PH...

Малая корзина Битрикс, упрощенный шаблон

Шаблон малой корзины битрикс, который можно вывести в боковом разделе шаблона или в шапке интернет-магазина. Код окульту...