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

Объединить отдельные поля ФИО в одно свойство при оформлении заказа.

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

Пользователь, при оформлении заказа, заполняет три отдельных поля с фамилией, именем и отчеством. Нам нужно сохранить это все одной строкой в отдельное, скрытое свойство заказа и использовать как название профиля покупателя.

Создаем новое свойство заказа, которое называем "ФИО целиком" с кодом FULL_NAME. Делаем его обязательным и служебным, что бы не показывалось при оформлении заказа. Обязательно задаем значение по умолчанию, что бы свойство в любом случае создавалось, при оформлении заказа.

Объединить отдельные поля ФИО в одно свойство при оформлении заказа.

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

Получаем свойства заказа и заполняем свойство

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

В файле confirm.php (этот файл отвечает за последний шаг заказа, шаблона sale.order.ajax, когда заказ уже сформирован) добавляем такой код:

if (!empty($arResult["ORDER"])):

    $order = \Bitrix\Sale\Order::load($arResult["ORDER"]['ID']);
    $collection = $order->getPropertyCollection();
    $dbRes = \Bitrix\Sale\PropertyValueCollection::getList([
        'select' => ['ID', 'NAME', 'CODE', 'VALUE'],
        // Можно добавить order что бы явно отсортировать свойства 
        // и FULL_NAME оказалось самым последним
        '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();

... тут остальной код этого файла ...
  • $order = \Bitrix\Sale\Order::load($arResult["ORDER"]['ID']); загрузили данные о свежесозданом заказе.
  • $dbRes = \Bitrix\Sale\PropertyValueCollection::getList получили все свойства этого заказа.
  • $fullname наполнили переменную с отдельными данными и имени, отчестве, фамилии.
  • $propertyValue->setField('VALUE', $fullname); свойство с кодом FULL_NAME заполниили переменной $fullname
  • $order->save(); сохранили заказ

В общем-то и все. Это свойство обновится на последнем шаге оформления заказа и в дальнейшем используется как название профиля.

Да, можно было не создавать и перезаписывать свойство а добавлять его методом $propertyValue = $collection->createItem. Но этот способ более ресурсоемкий и вызывает небольшой лаг на последнем шаге оформления заказа.

Михаил Базаров 12.06.2022
Можно не перебирать весь массив свойств, а получить только ФИО (отдельные)
Если каждое из них хранится как "Использовать как имя плательщтка"
Можно получить геттером
Код
$propertyValue = $collection->getPayerName();

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

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

Старые шаблоны битрикс для простой верстки Просмотров: 18217 Новые версии типового интернет-магазина, который идет в комплекте с Битрикс (от 12 версии ... Адаптивное гамбургер меню для битрикс Просмотров: 15172 Заметка коротенькая, но решил оставить ее - так как самому часто нужно нечто подобное. В а... Скопировать номер телефона из поля пользователя в телефон для регистр... Просмотров: 2841 Задача, на конкретном сайте: раньше все пользователи регистрировались по стандартному режи... Заполнить коэффициент единицы измерения (MEASURE_RATIO) из свойства э... Просмотров: 6498 Задачка: Каталог наполняется из 1С, но 1С не передает коэффициент единицы измерения (особе... Открытие мобильного приложения Apache Cordova по ссылке Просмотров: 1194 Достаточно часто нужно реализовывать открытие мобильного приложения по ссылке. Например: п... Вывод элементов с помощью API битрикс Просмотров: 24003 Иногда, выводить элементы инфоблока с помощью компонентов, может оказаться избыточным. Нап... Массово: применить наценку ко всем товарам каталога с пересчетом от б... Просмотров: 6401 Рассмотрим как, в магазине работающем на 1С-битрикс, массово применить наценку на все това... Свойство: привязка к Яндекс:Картам - вывести из нескольких элементов ... Просмотров: 18697 Предположим, что у вас есть инфоблок со свойством "Привязка к яндекс картам". В этом инфоб... Вывести дополнительное пользовательское поле, использование полей в ф... Просмотров: 16795 Если вам нужно вывести дополнительное пользовательское поле типа "Привязка к разделам инфо... Установка веб-сервера LAMP на ubuntu 20.04 LTS, оптимизированный под ... Просмотров: 12793 В последнее время, плотно пересел c macOS на ubuntu, и решил настроить себе полноценное ра... Изменить размер картинок на лету в битрикс Просмотров: 48894 Встала задачка: на собственном сайте, уменьшить размер превьюшек картинок у анонсов раздел... Вывести артикул в печатную форму бланка заказа Просмотров: 1114 Задача: в печатную форму бланка заказа добавить артикулы товаров и данные о пользователе. ... Добавить свойство в административную форму заказа Просмотров: 3802 Задача, кастомизировать административную форму заказа: добавить свойство заказа в шапку фо... Автоматическая загрузка каталогов из csv файлов в Битрикс Просмотров: 11828 Если требуется настроить автоматический импорт каталогов из csv файлов, от поставщиков. В... Помечаем новинки лейблом в каталоге битрикс Просмотров: 20877 Достаточно часто, при разработке каталога товаров или интернет магазина на системе управле... Простой WEB сервер на ubuntu, для Битрикс Просмотров: 35965 Расскажу как по быстрому сконфигурировать WEB сервер для работы с Битрикс. Безо всяких ngi... Установка Битрикс24 "Интернет-Магазин + CRM" на один домен и настройк... Просмотров: 1709 Задача: установить лицензию "Интернет-Магазин + CRM" на один домен. Что бы crm была доступ... Denwer c PHP 7.1.8 и MYSQL 5.7 оптимизированный для Битрикс Просмотров: 30811 В последнее время, все чаще приходиться работать на Windows, хотя и не люблю эту ОС- с точ... Очистка корзины в 1С-Битрикс одним нажатием Просмотров: 29636 В стандартной корзине Битрикс не хватает кнопки для полной очистки корзины одним нажатием... Вывести товары из того же раздела в карточке товара Просмотров: 18895 Немножко топорный, но все же вполне действенный способ по выводу внутри подробной карточки...