Блог Горошко Андрея 1C-Битрикс Получение значений пользовательского поля типа «Список»: CUserFieldEnum

Получение значений пользовательского поля типа «Список»: CUserFieldEnum

Средний рейтинг
Еще нет оценок

При работе с пользовательскими полями (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.

    Мой рейтинг:

    Добавить комментарий

    Related Post

    Управление разделами инфоблоков в Битрикс: CIBlockSection::GetList, Add, UpdateУправление разделами инфоблоков в Битрикс: CIBlockSection::GetList, Add, Update

    Средний рейтинг Еще нет оценок Разделы инфоблоков — это основа для построения каталогов, иерархических списков и любой другой вложенной структуры на сайте. Для работы с ними в старом API Битрикс

    Современные компоненты Битрикс: Переходим на class.phpСовременные компоненты Битрикс: Переходим на class.php

    Средний рейтинг Еще нет оценок Традиционно вся логика компонента Битрикс размещалась в файле component.php. Это простой и понятный подход, но для сложных компонентов он приводит к «лапше» из кода. Современный стандарт

    Манипуляции с URL в D7: Класс Bitrix\Main\Web\Uri (добавление, удаление параметров, парсинг)Манипуляции с URL в D7: Класс Bitrix\Main\Web\Uri (добавление, удаление параметров, парсинг)

    Средний рейтинг Еще нет оценок Работа с URL — рутинная задача: добавить GET-параметр, удалить «мусор», получить домен. В старом ядре использовались функции вроде $APPLICATION->GetCurPageParam. В D7 появился специализированный класс \Bitrix\Main\Web\Uri, который делает