Вывод значений пользовательских полей разных типов в Битриксе

Ниже рассматривается вопрос о выводе пользовательских полей Битрикса в публичной части сайта. Примеры, приведенные в данной заметке, основаны на работе с сущностью USER, но для пользовательских полей инфоблоков (и каталога в частности) все делается по аналогии.

Вывод пользовательских полей в битриксе

Хотелось бы разделить заметку на 2 логических блока:

  1. Пример по выводу названия пользовательского поля
  2.  Примеры по выводу пользовательских полей разных типов.

Пример по выводу названия пользовательского поля

Забавно, но для того, чтобы вывести название пользовательского поля в битриксе, сначала потребуется внимательно вчитаться в документацию, иначе вас будет ждать не совсем тот результат, что вы ожидаете. Все дело в указании параметра языка при вызове функции. Без его указания вы получите код поля. Тот, что задается латиницей.

Наглядный пример попытки вывода названия:

Вывод названия пользовательского поля (неудачный)

опытка вызвать «Подпись в форме редактирования», что выступает здесь человекопонятным названием, без указания языка терпит неудачу:

Вывод "подписи в форме редактирования" (неудачно)

Добавляем ‘LANG’ => ‘ru’ и получаем то, что хотели:

Удачный вывод названия пользовательского поля

Конечно, можно использовать для заголовка любую другую переменную. Например, «Заголовок в списке». Принцип тот же.

Код для вывода (не забудьте изменить xml_id на название своего свойства):

$fieldName = "";
$rsUserField = CUserTypeEntity::GetList(
[],
[
'XML_ID' => 'UF_BALANCE_EURO',
'LANG' => 'ru'
]
);
if($arUserField = $rsUserField->Fetch()) {
$fieldName = $arUserField['EDIT_FORM_LABEL'];
}


echo $fieldName;

Примеры по выводу пользовательских полей разных типов

Вывод свойства типа «строка» или «число»:

global $USER;
$arFilter = array("ID" => $USER->GetID());
$arParams["SELECT"] = array("UF_BALANCE_EURO");
$arRes = CUser::GetList($by,$desc,$arFilter,$arParams);
if ($res = $arRes->Fetch()) {
echo $res["UF_BALANCE_EURO"];
}

Вывод для свойства типа список:

global $USER;
if(is_object($USER))
{
$rsUser = CUser::GetList($by, $order,
array(
"ID" => $USER->GetID(),
),
array(
"SELECT" => array(
"UF_LIST",
),
)
);
if($arUser = $rsUser->Fetch())
{
$rsList = CUserFieldEnum::GetList(array(), array(
"ID" => $arUser["UF_LIST"],
));
if($arList = $rsList->GetNext())
echo $arList["VALUE"];
}
}

Вывод множественного свойства типа «строка» или «число»:

$arFilter = array("ID" => $USER->GetID());
$arParams["SELECT"] = array("UF_MULTI");
$arRes = CUser::GetList($by,$desc,$arFilter,$arParams);
if ($res = $arRes->Fetch()) {
foreach($res["UF_MULTI"] as $res){
echo $res."<br>";
};

};

Вывод для свойства типа «файл»:

global $USER;
$arFilter = array("ID" => $USER->GetID());
$arParams["SELECT"] = array("UF_FILE");
$arRes = CUser::GetList($by,$desc,$arFilter,$arParams);
if ($res = $arRes->Fetch()) {
$file = CFile::GetFileArray($res["UF_FILE"]);
$testValue = $file['SRC'];
echo $testValue;
}

На этом всё. Для прочих типов полей, присутствующих в битриксе, всё делается, плюс-минус, по аналогии.