Сергей Эсауленко

Разделяем ФИО на самостоятельные поля в компоненте sale.order.ajax

Иногда возникают ситуации, когда необходимо в компоненте sale.order.ajax раздели с строку ФИО на отдельные поля Фамилия, Имя, Отчество. Но при этом не утратить штатный функционал формирования профилей покупателя. На помощь приходят обработчик OnSaleComponentOrderJsData , который позволяет разбить полученную информацию на отдельные подстроки.

$eventManager->addEventHandler('sale', 'OnSaleComponentOrderJsData', 'OnSaleComponentOrderJsDataCustom');
function OnSaleComponentOrderJsDataCustom(&$arResult, &$arParams){


/**@global \CUser $USER */
global $USER;
if ($USER->IsAuthorized()
&& ($user_info = \Bitrix\Main\UserTable::getList([
'filter' => [
'=ID' => $USER->GetID(),
],
'select' => [
'EMAIL',
'NAME',
'LAST_NAME',
'SECOND_NAME',
'PERSONAL_PHONE',
],
])->fetch())
) {

foreach($arResult['JS_DATA']['ORDER_PROP']['properties'] as &$prop) {
if (!empty(reset($prop['VALUE']))) {
continue;
}
switch($prop['CODE']) {
//ФИО
case 'FIO':
$name_parts = [];
foreach([
'LAST_NAME',
'NAME',
'SECOND_NAME',
] as $name_key) {
if (empty($user_info[$name_key])) {
continue;
}
$name_parts[] = $user_info[$name_key];
}
$prop['VALUE'] = [
implode(' ', $name_parts)
];
break;

//Имя
case 'CONTACT_NAME':
$prop['VALUE'] = $user_info['NAME'];
break;

// Фамилия
case 'CONTACT_LAST_NAME':
$prop['VALUE'] = $user_info['LAST_NAME'];
break;

// Отчество
case 'CONTACT_SECOND_NAME':
$prop['VALUE'] = $user_info['SECOND_NAME'];
break;

// Телефон
case 'PHONE':
$prop['VALUE'] = $user_info['PERSONAL_PHONE'];
break;

// Email
case 'EMAIL':
$prop['VALUE'] = $user_info['EMAIL'];
break;

}
}
unset($prop);
}
}
25.11.2022
При оформление заказа проверять наличие профиля покупателя у других пользователей Битрикс