В некоторых случаях есть необходимость при регистрации пользователя создавать профиль покупателя, чтобы при переходе пользователя на страницу оформления заказ, у него сразу были подставлены поля из профиля, в частности номер телефона.
Для этого разместим код из примера ниже в файл bitrix/php_interface/init.php
.
Перед использованием кода из примера, замените значения для идентификтора типа плательщика $personalTypeId
и идентификаторы свойства заказа. Чтобы расширить набор свойств,которые попадут в профиль покупателя, дополните массив $arProfileProps
.
// подписываемя на событие модуля
$eventManager = \Bitrix\Main\EventManager::getInstance();
$eventManager->addEventHandler(
"main",
"OnAfterUserRegister",
"main_OnAfterUserRegister"
);
function main_OnAfterUserRegister($arFields)
{
//идентификтаор типа плательщика
$personalTypeId = 1;
if (!\Bitrix\Main\Loader::includeModule('sale')) {
return $arFields;
}
if (!\Bitrix\Main\Loader::includeModule('bxmaker.authuserphone')) {
return $arFields;
}
$userId = (int)$arFields["USER_ID"];
if (!$userId) {
return $arFields;
}
$oManager = \BXmaker\AuthUserPhone\Manager::getInstance();
$phone = $oManager->getPhone($userId);
if(!$phone)
{
return $arFields;
}
$phone = preg_replace('/[^\d]*/', '', $phone);
$arUser = \CUser::GetList(
'',
'',
[
'ID' => $userId
],
[
'FIELDS' => [
'NAME',
'LAST_NAME',
'SECOND_NAME',
'EMAIL'
]
]
)->Fetch();
if (!$arUser) {
return $arFields;
}
$arFio = array_map('trim', [$arFields['LAST_NAME'], $arFields['NAME'], $arFields['SECOND_NAME']]);
$fio = trim(implode(' ', array_values(array_diff($arFio, ['']))));
$email = $arUser['EMAIL'];
//массив свойств создаваемого профиля
$arProfileProps = [
[
"ORDER_PROPS_ID" => 1, // ID свойства заказа c ФИО
"NAME" => "ФИО",
"VALUE" => $fio
],
[
"ORDER_PROPS_ID" => 3, // ID свойства заказа c номером телефона
"NAME" => "Телефон",
"VALUE" => $phone
],
[
"ORDER_PROPS_ID" => 2, // ID свойства заказа c email адресом
"NAME" => "E-Mail",
"VALUE" => $email
]
];
//создаём новый профиль --------
$arProfileFields = [
"NAME" => "Профиль покупателя (" . $phone . ')',
"USER_ID" => $userId,
"PERSON_TYPE_ID" => $personalTypeId
];
$profileId = CSaleOrderUserProps::Add($arProfileFields);
if (!$profileId) {
return $arFields;
}
//добавляем значения свойств к созданному ранее профилю
foreach ($arProfileProps as $arProp) {
$resultProp = CSaleOrderUserPropsValue::Add(
array_merge($arProp, [
"USER_PROPS_ID" => $profileId,
])
);
}
return $arFields;
}
Чтобы проверить добавление, перейдите на страницу покупаталей - Администрирование / Магазин / Покупатели / Список покупателей
и найдите добавленного пользователя.
Затем на на странице покупателя, в соответствующей вкладке найдите профиль с названием Профиль покупателя (7 xxx xxx xx xx)