Разработка на 1С-Битрикс Михаил Базаров
Блог-note

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

Просмотров: 4769
Пользователь, при оформлении заказа, заполняет три отдельных поля с фамилией, именем и отчеством. Нам нужно сохранить это все одной строкой в отдельное, скрытое свойство заказа и использовать как название профиля покупателя.

Создаем новое свойство заказа, которое называем "ФИО целиком" с кодом FULL_NAME. Делаем его обязательным и служебным, что бы не показывалось при оформлении заказа. Обязательно задаем значение по умолчанию, что бы свойство в любом случае создавалось, при оформлении заказа.

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

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

Получаем свойства заказа и заполняем свойство

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

В файле confirm.php (этот файл отвечает за последний шаг заказа, шаблона sale.order.ajax, когда заказ уже сформирован) добавляем такой код:

if (!empty($arResult["ORDER"])):
$order = \Bitrix\Sale\Order::load($arResult["ORDER"]['ID']);
$collection = $order->getPropertyCollection();
$dbRes = \Bitrix\Sale\PropertyValueCollection::getList([
    'filter' => [
        '=ORDER_ID' => $arResult["ORDER"]['ID'], // ID этого заказа
        '=CODE' => [
            'FAMILIA',
            'NAME',
            'OTCHESTVO',
            'FULL_NAME',
            'EMAIL'
        ]
    ],
    'select' => ['ID','CODE','VALUE']
]);
while ($item = $dbRes->fetch()) {
    if ($item['CODE'] == 'FAMILIA') {
        $FAMILIA = $item['VALUE'];
    }
    if ($item['CODE'] == 'NAME') {
        $NAME = $item['VALUE'];
    }
    if ($item['CODE'] == 'OTCHESTVO') {
        $OTCHESTVO = $item['VALUE'];
    }
    if ($item['CODE'] == 'FULL_NAME') {
        $propId = $item['ID'];
    }
    if ($item['CODE'] == 'EMAIL') {
        $email = $item['VALUE'];
    }
}
$propertyValue = $collection->getItemById($propId);
$r = $propertyValue->setField('VALUE', $FAMILIA . ' ' . $NAME . ' ' . $OTCHESTVO);
$order->save();
// Долнительно обновим поля пользователя
$USER_UPD = new CUser;
$rsUser = CUser::GetByID($arResult["ORDER"]['USER_ID']);
$arUser = $rsUser->Fetch();
$fields = array(
    "EMAIL" => $email,
    "LOGIN" => $email,
    "LAST_NAME" => $FAMILIA,
    "NAME" => $NAME,
    "SECOND_NAME" => $OTCHESTVO
);
$USER_UPD->Update($arResult["ORDER"]['USER_ID'], $fields);
... тут остальной код этого файла ...
  • $order = \Bitrix\Sale\Order::load($arResult["ORDER"]['ID']); загрузили данные о свежесозданом заказе.
  • $dbRes = \Bitrix\Sale\PropertyValueCollection::getList получили нужные свойства этого заказа.
  • Получили ФИО из отдельных полей и ID свойства FULL_NAME в $propId = $item['ID'].
  • $r = $propertyValue->setField свойство с кодом FULL_NAME заполниили переменными с разрозненными ФИО
  • $order->save(); сохранили заказ

В конце еще дан пример для заполнения полей пользователя, так что бы заполнились его E-MAIL, логин заменился на электронную почту и заполнились поля с ФИО. Это код используйте на свое усмотрение. В общем-то и все. Это свойство обновится на последнем шаге оформления заказа и в дальнейшем используется как название профиля.

Да, можно было не создавать и перезаписывать свойство а добавлять его методом $propertyValue = $collection->createItem. Но этот способ более ресурсоемкий и вызывает небольшой лаг на последнем шаге оформления заказа.

Услуги

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

Стоимость разработки сайта зависит от объёма и сложности проекта. Ниже приведены ориентировочные цены, как правило не выходят за обозначенные рамки. Срок разработки зависит от сложности проекта: как правило называю сроки с запасом.

Финальная стоимость и сроки разработки обговариваются на этапе обсуждения. Скачайте опросник на разработку, заполните как можно подробнее и вышлите удобным способом. После ознакомления смогу задать уточняющие вопросы и оценить проект.

Включено в стоимость разработки

В цену уже заложено всё, что нужно для легального и быстрого запуска. Доплачивать за базовые вещи не придётся.

  • Лицензия и модули

    Лицензия на «1С-Битрикс» нужной редакции, дополнительные модули и видео-инструкции по работе с готовым проектом.

  • Скорость и SEO

    Оптимизация кода и сервера под быструю загрузку, базовая SEO-оптимизация и добавление сайта в поисковые системы.

Блог-note

Заметки по 1С-Битрикс