Ниже рассматривается вопрос о выводе пользовательских полей Битрикса в публичной части сайта. Примеры, приведенные в данной заметке, основаны на работе с сущностью USER, но для пользовательских полей инфоблоков (и каталога в частности) все делается по аналогии.
Хотелось бы разделить заметку на 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;
}
На этом всё. Для прочих типов полей, присутствующих в битриксе, всё делается, плюс-минус, по аналогии.