Получить 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