При работе с пользовательскими полями (UF_*) типа «Список» в базе данных хранится только ID выбранного варианта.
Но часто в коде нужно получить сам текст значения, его XML_ID или вывести все доступные варианты для фильтра.
Для этого используется класс CUserFieldEnum.
Задача: Получить все значения списка для поля UF_GENDER
Чтобы получить значения, нужно знать ID самого поля (FIELD_ID) или его название.
Проще всего искать по названию.
Находим ID поля по его коду:
$rsEnum = CUserTypeEntity::GetList([], ["ENTITY_ID" => "USER", "FIELD_NAME" => "UF_GENDER"]);
$arField = $rsEnum->Fetch();
$fieldId = $arField['ID'];Получаем значения списка:
$rsEnum = CUserFieldEnum::GetList( [], // Сортировка (не работает в этом методе) [ "USER_FIELD_ID" => $fieldId, // ID поля (обязательно или FIELD_NAME в старых версиях) ] ); $enumValues = [];
while ($arEnum = $rsEnum->Fetch()) { // $arEnum содержит: ID, VALUE, XML_ID, SORT, DEF (по умолчанию)
$enumValues[$arEnum['ID']] = $arEnum['VALUE'];
echo "ID: {$arEnum['ID']} - Значение: {$arEnum['VALUE']} (XML_ID: {$arEnum['XML_ID']})<br>"; }Получение конкретного значения по ID
Если у вас есть ID значения (например, из $arResult[‘UF_GENDER’]), получить его текст можно так:
$enumId = 15; // ID выбранного варианта
$rsEnum = CUserFieldEnum::GetList([], ["ID" => $enumId]);
if ($arEnum = $rsEnum->Fetch()) {
echo "Выбран пол: " . $arEnum["VALUE"];
}Важно: Метод GetList у CUserFieldEnum не поддерживает сортировку первым параметром (всегда передавайте пустой массив []). Сортировка значений всегда происходит по полю SORT внутри самого свойства.
Вывод:
Класс CUserFieldEnum — единственный способ добраться до метаданных списочных свойств (текст, XML_ID, сортировка).
Используйте его для построения фильтров или расшифровки значений в профиле пользователя или разделах.
CUserFieldEnum, GetList, пользовательское поле список, UF_ поле, значения списка битрикс, UserTypeEntity.