Почти в каждой платежной системе есть графа ФИО (например, квитанция Сбербанка, ФИО плательщика). Все бы ничего, но удобнее при заполнении заказа иметь поле не ФИО, а Фамилия, Имя, Отчество. Прежде всего потому что это однозначное и безошибочное заполнение, чтобы не перепутали имя с фамилией, и так далее. Но как превратить Ф,И,О в ФИО?
[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, ;)); } } } } } |
В итоге мы не трогаем ни компоненты, ни шаблоны, а пользователь получает корректно заполненный документ, который остается только распечатать