Бывают иногда просьбы сделать автоматическую фильтрацию или замену каких-либо символов в полях вебформы при сохранении результата вебформы в Битрикс. В этом посте я хочу показать как это можно сделать, обладая небольшими знаниями php. И в качестве бонуса постараюсь показать последовательность действий в поиске решения для реализации программного функционала для Битрикс.
Предположим, мы хотим сделать так, чтобы при добавлении нового результата формы все поля конвертировались в верхний регистр.
Первое, что нужно сделать — посмотреть к каким событиям мы можем прицепиться, чтобы реализовать то, что мы хотим. После прочтения списка событий http://dev.1c-bitrix.ru/api_help/form/events/index.php можно заключить, что искомое событие — onBeforeResultAdd. Оно вызывается при добавлении нового результата формы.
Заготовка кода будет выглядеть примерно так:
AddEventHandler(‘form’, ‘onBeforeResultAdd’, ‘onBeforeResultAddHandler’);
function onBeforeResultAddHandler($WEB_FORM_ID, $arFields, $arrVALUES)
{
}
В переменной $WEB_FORM_ID передается идентификатор формы, в $arrVALUES — поля результатов.
Функция преобразования в верхний регистр — strtoupper, но поскольку предполагается преобразование в том числе и utf8 кодированных данных, то необходимо использовать функцию mb_strtoupper.
В итоге получаем такой код:
AddEventHandler(‘form’, ‘onBeforeResultAdd’, ‘onBeforeResultAddHandler’);
function onBeforeResultAddHandler($WEB_FORM_ID, $arFields, $arrVALUES)
{
foreach($arrVALUES as $key=>&$val)
if (strpos($key, «text»)!==false)
$val = mb_strtoupper($val);
}
Строка strpos($key, «text»)!==false необходима для того, чтобы определять является ли данное поле текстовым.
Представленный выше код нужно поместить в файл /bitrix/php_interface/init.php
Спасибо! Помогли!