Почти в каждой платежной системе есть графа ФИО (например, квитанция Сбербанка, ФИО плательщика). Все бы ничего, но удобнее при заполнении заказа иметь поле не ФИО, а Фамилия, Имя, Отчество. Прежде всего потому что это однозначное и безошибочное заполнение, чтобы не перепутали имя с фамилией, и так далее. Но как превратить Ф,И,О в ФИО?
[spoiler]
Вариант первый - конечно кастомизировать платежку. Но постоянно для каждой новой платежки (и каждого нового проекта) лазить туда - не хочется. Да и лишаться обновлений - тоже.
Поступим хитро.
1. Заводим, свойства заказа (помимо прочих):
Фамилия (F_LAST_NAME)
Имя (F_NAME)
Отчество (F_SECOND_NAME)
ФИО (F_FIO)
В скобочках указаны коды свойств. Вы можете указать другие, тогда вам надо будет поменять в коде ниже это тоже.
2. Для оформления заказа будем применять компонент одношагового оформления заказа, в настройках которого укажем, НЕ показывать свойство ФИО. Остальное на усмотрение.
3. В настройках платежки указываем где будет лежать ФИО:

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

[spoiler]
Вариант первый - конечно кастомизировать платежку. Но постоянно для каждой новой платежки (и каждого нового проекта) лазить туда - не хочется. Да и лишаться обновлений - тоже.
Поступим хитро.
1. Заводим, свойства заказа (помимо прочих):
Фамилия (F_LAST_NAME)
Имя (F_NAME)
Отчество (F_SECOND_NAME)
ФИО (F_FIO)
В скобочках указаны коды свойств. Вы можете указать другие, тогда вам надо будет поменять в коде ниже это тоже.
2. Для оформления заказа будем применять компонент одношагового оформления заказа, в настройках которого укажем, НЕ показывать свойство ФИО. Остальное на усмотрение.
3. В настройках платежки указываем где будет лежать ФИО:

4. И код обработчика события, которое вызывается после завершения заказа.
AddEventHandler('sale', 'OnSaleComponentOrderOneStepComplete', array('CSalehandlers', 'OnSaleComponentOrderOneStepCompleteHandler'));
class CSalehandlers
{
public static function OnSaleComponentOrderOneStepCompleteHandler($ID, $arFields)
{
if ($arFields['ID']>0 && $arFields['USER_ID'] > 0)
{
$arFIO = array();
$rsProp = CSaleOrderPropsValue::GetList(array(), array('ORDER_ID' => $arFields['ID']));
while ($arProp = $rsProp->Fetch())
{
if ($arProp['CODE']=='F_NAME')
$arFIO['NAME'] = $arProp['VALUE'];
elseif ($arProp['CODE']=='F_LAST_NAME')
$arFIO['LAST_NAME'] = $arProp['VALUE'];
elseif ($arProp['CODE']=='F_SECOND_NAME')
$arFIO['SECOND_NAME'] = $arProp['VALUE'];
}
$FIO = trim($arFIO['LAST_NAME'] .' '. $arFIO['NAME'] .' '. $arFIO['SECOND_NAME']);
if ($FIO != '')
{
if ($arProp = CSaleOrderProps::GetList(array(), array(
'CODE' => 'F_FIO',
'PERSON_TYPE_ID' => $arFields['PERSON_TYPE_ID']))->Fetch())
{
CSaleOrderPropsValue::Add(array(
'ORDER_ID' => $arFields['ID'],
'ORDER_PROPS_ID' => $arProp['ID'],
'NAME' => $arProp['NAME'],
'CODE' => 'F_FIO',
'VALUE' => $FIO,
;));
}
}
}
}
} |
В итоге мы не трогаем ни компоненты, ни шаблоны, а пользователь получает корректно заполненный документ, который остается только распечатать
