Заметка готова, рекомендую воспользоваться кодом из нее, он более лаконичный и правильный
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) Всю работу с массивом и сохранением свойства + заказа делаем внутри цикла.