Получить HTML-код checkbox и radio в шаблоне компонента bitrix:form.result.new

Пример получения HTML-кода для полей input[type="checkbox"] и input[type="radio"] в шаблоне компонента bitrix:form.result.new стандартными методами.

Наверняка сталкивались с такой проблемой, когда у вас есть готовая верстка web-формы и вы пытаетесь ее внедрить в шаблон компонента bitrix:form.result.new. Но в массиве данных $arResult нет чистого кода для input[type="checkbox"] и input[type="radio"], а есть код в котором кроме самого поля, дополнительно присутствует тег <label>, который очень мешает.

Для решения этой проблемы многие "умельцы" используют регулярные выражения, что бы вырезать все лишнее и оставить чистый input.

Но как все мы знаем, что после обновления CMS 1С-Битрикс, очень многое может поменяться, в том числе может быть изменен HTML-код полей в форме. И достаточно вероятно что регулярное выражение уже не будет работать или будет работать с ошибками. По этой причине я предлагаю альтернативный вариант.

Я открыл код самого компонента bitrix:form.result.new и нашел в нем кусок кода отвечающий за HTML-код полей.

На самом деле все очень просто, там используются стандартные методы 1С-Битрикс.

<? //Пробегаемся по списку всех вопросов foreach ($arResult['QUESTIONS'] as $FIELD_SID => $arQuestion) { if ($arQuestion['STRUCTURE'][0]['FIELD_TYPE'] == 'checkbox') { //Если тип вопроса checkbox //Открываем контейнер для вопроса и выводим название вопроса с пометкой обязателен ответ или нет ?> <div class="field"> <p><?=$arQuestion['CAPTION']?><?=$arQuestion['REQUIRED'] == 'Y' ? '*' : ''?></p> <? //Вариантов ответа может быть несколько и для каждого свой checkbox, поэтому пробегаемся по всем ответам и для каждого получаем HTML-код foreach ($arResult['arAnswers'][$FIELD_SID] as $arAnswer) { //Получаем значение текущего ответа $value = \CForm::GetCheckBoxValue( $FIELD_SID, $arAnswer, $arResult['arrVALUES'] ); //Получаем HTML-код для input[type="checkbox"] $inputHtml = \CForm::GetCheckBoxField( $FIELD_SID, $arAnswer['ID'], $value, $arAnswer['FIELD_PARAM'] //Это параметр ответа, который заполняется при создании вопроса web-формы, тут может быть например class="checkbox" ); //Тут выводим сам инпут, можем его обернуть в нужные теги, например ?> <label><?=$inputHtml?> <span><?=$arAnswer['VALUE']?></span></label> <? } ?> </div> <? } elseif ($arQuestion['STRUCTURE'][0]['FIELD_TYPE'] == 'radio') { //Если тип вопроса radio //Открываем контейнер для вопроса и выводим название вопроса с пометкой обязателен ответ или нет ?> <div class="field"> <p><?=$arQuestion['CAPTION']?><?=$arQuestion['REQUIRED'] == 'Y' ? '*' : ''?></p> <? //Вариантов ответа может быть несколько и для каждого свой radio, поэтому пробегаемся по всем ответам и для каждого получаем HTML-код foreach ($arResult['arAnswers'][$FIELD_SID] as $arAnswer) { //Получаем значение текущего ответа $value = \CForm::GetRadioValue( $FIELD_SID, $arAnswer, $arResult['arrVALUES'] ); //Получаем HTML-код для input[type="radio"] $inputHtml = \CForm::GetRadioField( $FIELD_SID, $arAnswer['ID'], $value, $arAnswer['FIELD_PARAM'] //Это параметр ответа, который заполняется при создании вопроса web-формы, тут может быть например class="radio" ); //Тут выводим сам инпут, можем его обернуть в нужные теги, например ?> <label><?=$inputHtml?> <span><?=$arAnswer['VALUE']?></span></label> <? } ?> </div> <? } elseif ($arQuestion['STRUCTURE'][0]['FIELD_TYPE'] == 'hidden') { //Если тип вопроса hidden echo $arQuestion['HTML_CODE']; } else { //У других типов не добавляется ничего лишнего, поэтому просто выводим их код ?> <div class="field"> <p><?=$arQuestion['CAPTION']?><?=$arQuestion['REQUIRED'] == 'Y' ? '*' : ''?></p> <?=$arQuestion['HTML_CODE']?> </div> <? } } ?>

Теги: 1С-Битрикс, Шаблон, bitrix:form.result.new, Компонент, HTML, checkbox, radio