Bitrix – Веб формы – убираем label в radio

Если вы пользуетесь стандартными веб формами и используете свой шаблон, иногда необходимо внести изменения в файл вывода input,select и пр блоков.

Я столкнулся с задачей изменить radio. Копался в коде form.result.new. Но он работает только когда вы используете шаблоны по умолчанию. При изучении компонента столкнулся с таким кодом:

// get template
if ($strReturn = $FORM->IncludeFormCustomTemplate())
{
// add icons
$back_url = $_SERVER['REQUEST_URI'];

$editor = "/bitrix/admin/fileman_file_edit.php?full_src=Y&site=".SITE_ID."&";
$href = "javascript:window.location='".$editor."path=".urlencode($path)."&lang=".LANGUAGE_ID."&back_url=".urlencode($back_url)."'";

if ($arParams['USE_EXTENDED_ERRORS'] == 'Y')
$APPLICATION->SetAdditionalCSS($this->GetPath()."/error.css");

// output template
echo $strReturn;

return;
}

 

 

И тут работа компонента останавливается. Все данные лежат в $strReturn. Если выполняем print_r($strReturn) то выводится та же форма. Куда копать дальше? А вот сюда – $FORM->IncludeFormCustomTemplate().

Эта команда приводит нас к CFormOutput::IncludeFormCustomTemplate.

Оттуда ищем подобные элементы, натыкаемся на CFormOutput::ShowInput. Ага, это то что нам нужно.

//if ($key > 0) $res .= "<br />"; отключаем эту строчку чтобы убрать <br>

switch ($arAnswer["FIELD_TYPE"])
{
case "radio":
$ans_id = "form_checkbox_".$FIELD_SID."_".$arAnswer['ID'];
$arAnswer['FIELD_PARAM'] .= ' id="'.$ans_id.'"';

$value = CForm::GetRadioValue($FIELD_SID, $arAnswer, $arrVALUES);
$input = CForm::GetRadioField(
$FIELD_SID,
$arAnswer["ID"],
$value,
$arAnswer["FIELD_PARAM"]
);

$res.='<div class="col-xl-6 col-lg-6 col-md-6 col-sm-6 col-6 no-padding">';  //выводим обертку если нам необходима
$bodytag = str_replace("<label>", "", $input);
$bodytag = str_replace("</label>", "", $bodytag);

if (strlen($ans_id) > 0)
{
$res .= $bodytag;
$res .= "<label for=\"".$ans_id."\" class='label-sec'>";
$res .= "&nbsp;".$arAnswer["MESSAGE"]."</label>";
}
else
{
$res .= "<label>";
$res .= $input;
$res .= "<span class=\"".$caption_css_class."\">&nbsp;".$arAnswer["MESSAGE"]."</span></label>";
}
$res.='</div>';

break;

 

Вот тут собственно и всё. Конечно не очень хорошо лезть в ядро модуля form, но что поделать. Необходимо решить задачу вывода. Если необходимо убрать только <label>…</label> можно было бы модифицировать InputType но это совсем лезть в ядро main поэтому решил заменить в формах.