Меню

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

RSS
Объединить отдельные поля ФИО в одно скрытое поле- при оформлении заказа в Битрикс, Черновик, для будующей заметки в блог
 
Это черновк для будущей, более развернутой, заметки в блог https://camouf.ru/blog-note/

Заметка готова, рекомендую воспользоваться кодом из нее, он более лаконичный и правильный
https://camouf.ru/blog-note/12877/


Задача:
Пользователь, при оформлении заказа, заполняет три отдельных поля с фамилией, именем и отчеством.
Нам нужно сохранить эти три поля в одно "ФИО целиком" не показывая его пользователю.

1) Создаем служебное (не видимое пользователю) свойство заказа, называем как нам нужно. Пусть будет "ФИО целиком".
Обязательное и обязательно со значением по умолчанию.

2) Значение по умолчанию, вообще любое. Главное, что бы свойсво создалось во время оформления заказа- так сэкономим на будущих итерациях.

3) В шаблоне оформления заказа, в файл confirm.php добавляем:
Код
$db_props = CSaleOrderPropsValue::GetOrderProps($arResult["ORDER"]['ID']);
           while ($arProps = $db_props->Fetch()) {
              if ($arProps['CODE'] == 'NAME') {
                 $name = $arProps['VALUE'];
              }
              if ($arProps['CODE'] == 'S_NAME') {
                 $s_name = $arProps['VALUE'];
              }
              if ($arProps['CODE'] == 'L_NAME') {
                 $l_name = $arProps['VALUE'];
              }
           }
           $fullname = $s_name . ' ' . $name . ' ' . $l_name;
           
         $order = \Bitrix\Sale\Order::load($arResult["ORDER"]['ID']);
         $collection = $order->getPropertyCollection();
         $dbRes = \Bitrix\Sale\PropertyValueCollection::getList([
             'select' => ['ID'],
             'filter' => [
                 '=ORDER_ID' => $arResult["ORDER"]['ID'], 
                 'ORDER_PROPS_ID' => 12
             ]
         ]);
         while ($item = $dbRes->fetch())
         {
             $propertyValue = $collection->getItemById($item['ID']);
            $r = $propertyValue->setField('VALUE', $fullname);
         }   
$order->save();

Пояснения:
- C CSaleOrderPropsValue::GetOrderProps получили поля заказа с ФИО и создали переменную с ФИО целиком.
- C \Bitrix\Sale\PropertyValueCollection::getList получили ID свойства заказа с "ФИО целиком"
- С $propertyValue->setField установили значение свойства из переменной с полным ФИО
- Сохранили заказ

Заметка готова, рекомендую воспользоваться кодом из нее, он более лаконичный и правильный
https://camouf.ru/blog-note/12877/


Улучшения (для заметки).
1) SaleOrderPropsValue::GetOrderProps не нужен, мы итак загрузили заказ в  \Bitrix\Sale\Order::load и получили коллекцию свойств.
2) В \Bitrix\Sale\PropertyValueCollection::getList получаем только нужные поля с ФИО и свойство для заполнения. Таким образом не тягаем весь массив с заказом в ОЗУ.
3) Всю работу с массивом и сохранением свойства + заказа делаем внутри цикла.
Изменено: Михаил Базаров - 11.06.2022 11:49:31
 
Добрый день, сделал все как указанно на странице но не поле не объединяется, HELP
 
Коды отдельных полей правильно указаны? В примере это: NAME, S_NAME и L_NAME
У вас могут быть другие.
И ID поля в которое они должны записать, в примере 'ORDER_PROPS_ID' => 12

PS: Чуть позже будет заметка в блоге. Более развернутая
 
Цитата
написал:
Коды отдельных полей правильно указаны? В примере это: NAME, S_NAME и L_NAME
У вас могут быть другие.
И ID поля в которое они должны записать, в примере 'ORDER_PROPS_ID' => 12

PS: Чуть позже будет заметка в блоге. Более развернутая
Коды полей и id указаны верно, все равно не объединяет
Читают тему
Форма ответов
 
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
 

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

Как вывести свойства инфоблока по отдельности и немного плюшек не в тему

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

Переключатель валюты в каталоге 1С-Битрикс

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

Почтовое событие на создание нового элемента инфоблока, через API

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

Глобальные фильтры на всякие случаи жизни

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

Простые калькуляторы в карточке товара каталога на Битрикс

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

Time Capsule на Windows 10. Хранение бекапов Time Machine на компьютере с Windows 10

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

СЕО настройки сайта перед запуском

В видео рассказано о первоначальной СЕО настройке сайта перед запуском. Все показанное является компилицией из собственн...

Композитный сайт на 1С-Битрикс

Для новых клиентов: Все новые проекты будут включать в себя применение технологии "Композитный сайт" - данная услуга уже...

Получить и вывести данные из профиля покупателя в кабинете пользователя 1С-Битрикс

Задача: вывести пользователю информацию по всем, его, профилям покупателя в компоненте sale.personal.profile.list без пе...