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

Просмотров: 4231

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

Создаем новое свойство заказа, которое называем "ФИО целиком" с кодом 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С-Битрикс:

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

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

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

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

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

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

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

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

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

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

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

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

Инфресурс

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

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

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

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

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