Скрыть тип плательщика в форме заказа sale.order.ajax в Bitrix
Задача
В каталоге интернет‑магазина может существовать технический или B2B‑тип плательщика, который не должен попадать в публичную форму оформления, хотя в админке он остаётся доступен. Штатный компонент bitrix:sale.order.ajax перед выводом блока «тип плательщика» отдаёт результат в событие модуля sale с именем OnSaleComponentOrderOneStepPersonType, где можно вычеркнуть лишние строки из $arResult['PERSON_TYPE'].
Регистрация и обработчик
Подключите класс через автозагрузку или явный require, затем один раз зарегистрируйте обработчик из /local/php_interface/init.php или области, которая точно исполняется на витрине до компонента заказа.
namespace Ciftix\Sale\Checkout;
use Bitrix\Main\EventManager;
EventManager::getInstance()->addEventHandler(
'sale',
'OnSaleComponentOrderOneStepPersonType',
[PersonTypePruner::class, 'dropBySymbolicCode']
);
class PersonTypePruner
{
public static function dropBySymbolicCode(
&$stepSnapshot,
&$mutatedSnapshot,
&$runtimeParams
): void {
$maskedMnemonic = 'b2b_extranet';
if (!isset($stepSnapshot['PERSON_TYPE']) || !is_array($stepSnapshot['PERSON_TYPE'])) {
return;
}
foreach ($stepSnapshot['PERSON_TYPE'] as $rowKey => $payerBrief) {
if (($payerBrief['CODE'] ?? '') === $maskedMnemonic) {
unset($stepSnapshot['PERSON_TYPE'][$rowKey]);
}
}
}
}Первый аргумент события по смыслу совпадает с тем $arResult, который увидит шаблон после цепочки обработчиков: достаточно править его, не трогая $arParams, если нет отдельной потребности синхронизировать «модифицированный» массив второго параметра.
Поведение и проверки
- Отбор идёт по полю
CODEтипа плательщика; при несовпадении регистра символы должны совпадать дословно с настройкой в административной части. - После серии
unsetиндексы массива остаются разреженными — для шаблонов наforeachэто обычно не проблема; если где‑то ожидается плотный список с0..n, оберните выдачу вarray_valuesна своей стороне. - Если вы спрячете единственный доступный тип или тот, который выбран по умолчанию, проверьте сценарии гостя и авторизованного пользователя, чтобы не получить пустой шаг без подсказки.
Итог
OnSaleComponentOrderOneStepPersonType — точечный крючок для косметики формы заказа без отключения типа плательщика в модуле целиком.
Не хотите копаться сами?
Починю за 1-3 дня. Без предоплаты — оплата по результату.
15+ лет опыта с 1С-Битрикс · Без предоплаты · 7 дней гарантии