Программная работа с данными полями форм
Покажу как заполнять и изменять пограмнно, значения полей и значения вопросов в модуле Webforms
в 1C-Bitrix
.
У вебформ есть 2 сущности, в которые мы можем сохранять данные: Вопросы
и Поля
.
Вопросы
отображаются в самой форме на странице, их видит пользователь.
Поля
нужны только для администратора, пользователю они не показываются, заполнить их пользователь соответственно тоже не может.
Работать будем через события вебформ, обработчики лучше всего добавлять в файле /local/php_interface/init.php
. Так советует сам Битрикс и это очень удобно, когда все доработки по сайту лежат в отдельной папке local
.
Заполнение ответов на вопросы
Основную работу делает сам модуль, выводит вопросы пользователю и сохраняет ответы. Нам может потребоваться как-то изменить ответы. Например, из номера телефона убрать все лишние символы.
Чтобы заполнять ответы, нам надо знать тип вопроса
и его ID
:
init.php// объект, через который добавляются события
$eventManager = \Bitrix\Main\EventManager::getInstance();
// событие на добавление результатов в вебформу
$eventManager->addEventHandler('form', 'onBeforeResultAdd', 'clearPhone');
// очищаем номер телефона от посторонних символов
function clearPhone($WEB_FORM_ID, &$arFields, &$arrVALUES)
{
// работаем только с формой номер 3
if ($WEB_FORM_ID !== '3') return;
// имя нужного поля
$valueName = 'form_text_5';
// вырезаем всё, кроме цифр и плюса
$arrVALUES[$valueName] = preg_replace('#[^0-9\+]#', '', $arrVALUES[$valueName]);
}
form_text_5
это имя поля ответа, которое надо очищать. Имена полей в вебформах строятся по такому шаблону form_{ТИП}_{ID}
, где:
{ТИП}
тип вопроса{ID}
ID вопроса
Заполнение дополнительных полей
С полями всё намного проще, потому что мы сразу можем обращаться по коду. Например, нам надо сохранить страницу, на которой пользователь отправил результат. Cоздаем поле с кодом PAGE
и типом текст:
init.php// объект, через который добавляются события
$eventManager = \Bitrix\Main\EventManager::getInstance();
// событие на добавление результатов в вебформу
$eventManager->addEventHandler('form', 'onAfterResultAdd', 'addWebformPage');
// в результаты формы добавляем ссылку на страницу, на которой заполнена форма
function addWebformPage($WEB_FORM_ID, $RESULT_ID)
{
// заполняем поле
CFormResult::SetField($RESULT_ID, 'PAGE', $_SERVER['HTTP_REFERER']);
}