Отправка в письме только заполненных полей 1С Битрикс

2021.08.09
Допустим у вас есть веб-форма в которой много полей и не все они заполняются, или заполняются в зависимости от каких то условий, стандартный модуль веб форм создаёт шаблоны для ник вот в таком виде
Название поля
------------------------
Значение поля

но если заполнены не все поля получается такая картина

Название поля
------------------------

Название поля
------------------------
Значение поля

Название поля
------------------------

Как то не удобно обрабатывать такие заявки, по этому предлагаю такое решение.
Код представленный ниже вставляем в /local/init.php или подключаемый к нему файл

в самих шаблонах
удаляем все поля для вывода и прописываем строку #MESSAGE#
сохраняем обязательно в формате html Остаётся только прописать ID форм в самом коде для которых будет работать это правило.
        <?
AddEventHandler('main', 'OnBeforeEventAdd', array("MyCustomForm", "my_OnBeforeEventAdd"));

class MyCustomForm
{
    function my_OnBeforeEventAdd($event, &$lid, &$arFields)
    {
        /* ID форм у которых нужно выводить только заполненные результаты */
        $arrayForms = [
            11,
            13,
            14,
        ];
        /* Проверяем есть ли текущая форма в нашем массиве */
        if (in_array($arFields['RS_FORM_ID'], $arrayForms)) {
            if (CModule::IncludeModule("form")) {
                /* получаем все вопросы формы*/ 
                $FORM_ID = $arFields['RS_FORM_ID'];
                $arFilter = array();
                $rsQuestions = CFormField::GetList(
                    $FORM_ID,
                    "N",
                    $by = "s_id",
                    $order = "desc",
                    $arFilter,
                    $is_filtered
                );
                $messageArray = array();
                while ($arQuestion = $rsQuestions->Fetch()) {
                    $messageArray[$arQuestion['C_SORT']]['NAME'] = $arQuestion['TITLE'];
                    $messageArray[$arQuestion['C_SORT']]['VALUE'] = $arFields[$arQuestion['SID']];
                }
                /* Сортируем полученный массив по полю сортировка (в данном случае оно записано как ключ) */
                ksort($messageArray);
                
                 /* создаём таблицу из заполненных свойств  */
                $arFields['MESSAGE'] = '<table border="1">';
                foreach ($messageArray as $key => $oneField){
                    if(!empty(trim($oneField['VALUE']))) {
                        $arFields['MESSAGE'] .= '<tr>';
                        $arFields['MESSAGE'] .= '<td>' . $oneField['NAME'] . '</td>';
                        $arFields['MESSAGE'] .= '<td>' . $oneField['VALUE'] . '</td>';
                        $arFields['MESSAGE'] .= '</tr>';
                    }
                }
                $arFields['MESSAGE'] .= '</table>';
                $arFields['MESSAGE'] = htmlspecialchars_decode(htmlspecialchars($arFields['MESSAGE']));
            }
        }
    }
}    
Текст сообщения*
Загрузить файл или картинкуПеретащить с помощью Drag'n'drop
Перетащите файлы
Ничего не найдено
Защита от автоматических сообщений