Меню

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

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 указаны верно, все равно не объединяет
Читают тему
Форма ответов
 
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
 
Поблагодарить и поддержать:
Или подписаться на boosty канал: Видео на Bst
Сайт в режиме тех обслуживания

Сообщения форума и комментарии не сохраняются

Возвращайтесь после 12-го января

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

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

Например: у нас есть инфоблок с большим количеством разделов. И мы хотим, на сайте разбить разделы по буквам. Самый прос...

Получение местоположений через API Битрикс c поиском по select.

Если нужно получить список городов из модуля "Местоположения" можно воспользоваться API Битрикс. Данные местоположения м...

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

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

Cordova, ввод в input под диктовку. Голосовой поиск в мобильном приложении.

Итак, задачка: реализовать голосовой поиск в мобильном приложении на Cordova. По сути, нам нужно захватить речь с микроф...

Картинка торгового предложения вместо иконки цвета, в выборе SKU

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

Автоматически отгрузить заказ и сменить статус отгрузки, при выполнении заказа.

Проблема: Заказы, на сайте, обрабатываются только в 1С. При этом 1С не работает с отгрузками и обменивается только стату...

Отключить поиск по описаниям товаров в Битрикс

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

Отфильтровать элементы в Битрикс по свойству привязка к разделам

При создании достаточно сложных интернет-магазинов на Битрикс, иногда встает задача помимо обычной навигации каталогу со...

Работа с пользователями через API D7 1С-Битрикс

Заметка написана на основе старого черновика, и все описанное было проверено на чистой установке 1С-Битрикс. Примеры раб...