• Telegram: mibazarow
  • Whatsapp: MihailBazarow
  • E-mail: mihail@bazarow.ru

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

Внимание! Все сообщения на форуме проходят модерацию. Ваше сообщение появится после проверки.
Это черновк для будущей, более развернутой, заметки в блог 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) Всю работу с массивом и сохранением свойства + заказа делаем внутри цикла.
Добрый день, сделал все как указанно на странице но не поле не объединяется, HELP
Коды отдельных полей правильно указаны? В примере это: NAME, S_NAME и L_NAME
У вас могут быть другие.
И ID поля в которое они должны записать, в примере 'ORDER_PROPS_ID' => 12

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

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

Стоимость разработки на 1С-Битрикс:

Индивидуальная разработка магазина

от 400 000 руб. от 5-ти недель

Разработка магазина на 1С-Битрикс с нуля. Дизайн, сборка и оптимизация производительности под конкретный проект и требования. Реализация любого функционала без ограничений готовых решений.

Запуск сайта на готовом решении

от 100 000 руб. от 7-ми дней

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

Мобильное приложение

от 400 000 руб. от 1-го месяца

Разработка кроссплатформенного мобильного приложения, которое не уступает нативным решениям как в производительности, так и пользовательском опыте. Публикуется в AppStore, GooglePlay и RuStore

Сайт компании

от 250 000 руб. от 1-го месяца

Корпоративный сайт с информационными разделами, каталогом товаров или услуг. Включает формы обратной связи карточек каталога, любое количество статичных и динамичных разделов.

Инфресурс

от 300 000 руб. от 5-ти недель

Информационный ресурс любой сложности. Сайт для СМИ, городской портал или многопользовательская доска объявлений. Внутренние форумы, блоги- по необходимости.

Лечение сайтов от вирусов

от 30 000 руб. от 2-х дней

Выполню полную проверку сайта и окружения. В случае обнаружения вирусов проведу полный комплекс лечения проекта и закрытия лазеек.