Меню

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

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: заметки разработчика

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

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

Звездочки в рейтинге Битрикс статей и товаров каталога

Задача: изменить вывод рейтинга элемента на звездочки, с помощью шаблона iblock.vote в товарах и новостях.

Использование WebP изображений в 1С-Битрикс (на Битрикс: Веб окружение)

WebP это современный формат сжатия изображений, который позволяет, при правильных настройках и уровнях сжатий, уменьшить...

Вывести производителей на сайте с отбором его товаров из каталога

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

Валидация пароля и подтверждения при регистрации в битрикс

Встала задачка сделать валидацию пароля и его подтверждения в стандартной форме регистрации сайта под управлением Битрик...

GIT-репозиторий на собственном сервере с веб-интерфейсом: Gitea - аналог GitHub

Задача: Развернуть git-репозиторий на собственном сервере с помощью Gitea — для ведения проектов, с веб-интерфейсом и по...

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

При создании заказа покупатель заполняет поле "ФИО". Необходимо скопировать эти данные в профиль пользователя (не путать...

Сниппеты типографики bootstrap, для Битрикс

Если вы подключили bootstrap к своему сайту, или сверстали весь шаблон, подключив bootstrap из ядра битрикс. Имеет смысл...

Мобильные версии страниц и поисковые системы

Согласно требования поисковых систем: Яндекс и Google, в случае если у вашего сайта имеется мобильная версия, нужно увед...