Добавление профиля покупателя
В компоненте bitrix:sale.personal.profile.detail есть только редактирование, чтобы научить его добавлять новые профили, нужно немного кастомного кода.
Идея в том, что форма добавления будет такой же как и изменения профиля, за одним исключением, поле USER_PROPS_ID будет пустое. USER_PROPS_ID это ID профиля покупателя.
Если отправить такую форму в стандартный компонент, он вернет ошибку "Профиль не найден". Поэтому надо до подключения компонента создать новый профиль и передать в параметры компонента.
$request = \Bitrix\Main\Application::getInstance()->getContext()->getRequest(); if ($_REQUEST["USER_PROPS_ID"] > 0) { $profileId = IntVal($_REQUEST["USER_PROPS_ID"]); } elseif ($request->isPost() && ($request->get("save") || $request->get("apply")) && check_bitrix_sessid() && $request->get("NAME")) { // Добавляем новый профиль $ob = new CSaleOrderUserProps(); $id = $ob->Add(array( 'PERSON_TYPE_ID' => 1, 'USER_ID' => $USER->GetID(), 'NAME' => $request->get("NAME") )); if ($id > 0) { $profileId = $id; } } $APPLICATION->IncludeComponent( "bitrix:sale.personal.profile.detail", "json", Array( "COMPATIBLE_LOCATION_MODE" => "N", "ID" => $profileId, "PATH_TO_DETAIL" => "", "PATH_TO_LIST" => "", "SET_TITLE" => "N", "USE_AJAX_LOCATIONS" => "N" ) );
Учтите, что новый профиль будет создаваться каждый раз при отправке формы, даже если компонент вернул ошибку. Тут несколько вариантов:
- встроить код в класс компонента, что бы была возможность проверить валидность полей до создания профиля
- проверять поля формы на фронте, что бы у компонента не возникло вопросов
- можно возвращать id нового профиля сразу в форму, что бы после исправления ошибок не создавать еще один профиль
- написать свой компонент добавления профиля и не заниматься ерундой :)
Есть вопросы или нашли ошибку? Напишите комментарий (можно без регистрации), отвечать стараюсь быстро.