Поле типа список - это поле, которое позволяет выбрать один или несколько вариантов из предопределенного списка. Например, вы можете создать поле "Тип клиента", где будут доступны варианты "Физическое лицо", "Юридическое лицо", "ИП" и т.д.
При разработке часто нужно получить все или какие-то конкретные значения списка.
Ниже приведены примеры как это можно сделать.
Получить все варианты значений поля
Всю необходимую информацию о пользовательском поле: ID, название поля (код), к какому объекту привязно поле, можно узнать в админке в разделе Настройки - Пользовательские поля.
Используя ID поля
$res = \CUserFieldEnum::GetList(array(), array(
"USER_FIELD_ID" => 239
));
while($row = $res->Fetch()) {
var_dump($row);
}
USER_FIELD_ID
- ID пользовательского поля;
Используя код поля
Вариант 1
Можно получить значения используя только код поля, НО если на портале есть поля с одинаковым кодом привязанные к разным объектам, в результате можно получить значения не того списка. Более надежный способ представлен в варианте 2.
$res = \CUserFieldEnum::GetList(array(), array(
"USER_FIELD_NAME" => "UF_CRM_1541699881"
));
while($row = $res->Fetch()) {
var_dump($row);
}
Вариант 2
В данном примере с начала загружаем информацию о самом поле по его коду (FIELD_NAME) и с указанием объекта к которому оно привязано. Затем уже на основе полученных данных извлекаем ID поля и загружаем список значений на его основе.
На проекты могут быть пользовательские поля с одинаковым кодом, например: UF_REGION, привязанные к разным объектам, именно чтобы избежать получения значений не того поля и делается первый запрос с фильтром по нужному объекту.
$fieldInfo = \Bitrix\Main\UserFieldTable::GetList(array(
'select' => array('*'),
'filter' => array('FIELD_NAME' => 'UF_CRM_1541699881', 'ENTITY_ID' => 'CRM_DEAL')
))->Fetch();
$res = \CUserFieldEnum::GetList(array(), array(
"USER_FIELD_ID" => $fieldInfo['ID']
));
while($row = $res->Fetch()) {
var_dump($row);
}
FIELD_NAME
- код пользовательского поля;
ENTITY_ID
- объект к которому привязано поле;
Пример результата работы:
array(6) {
["ID"]=>
string(1) "7"
["USER_FIELD_ID"]=>
string(2) "72"
["VALUE"]=>
string(14) "Плиткой"
["DEF"]=>
string(1) "N"
["SORT"]=>
string(3) "500"
["XML_ID"]=>
string(5) "table"
}
array(6) {
["ID"]=>
string(1) "8"
["USER_FIELD_ID"]=>
string(2) "72"
["VALUE"]=>
string(14) "Списком"
["DEF"]=>
string(1) "N"
["SORT"]=>
string(3) "500"
["XML_ID"]=>
string(4) "list"
}
array(6) {
["ID"]=>
string(1) "9"
["USER_FIELD_ID"]=>
string(2) "72"
["VALUE"]=>
string(16) "Таблицей"
["DEF"]=>
string(1) "N"
["SORT"]=>
string(3) "500"
["XML_ID"]=>
string(5) "price"
}
Получить конкретный вариант значения поля
<?
$res = \CUserFieldEnum::GetList(array(), array("ID" => 7));
$row = $res->Fetch();
var_dump($row);
?>
Пример результата работы:
array(6) {
["ID"]=>
string(1) "7"
["USER_FIELD_ID"]=>
string(2) "72"
["VALUE"]=>
string(14) "Плиткой"
["DEF"]=>
string(1) "N"
["SORT"]=>
string(3) "500"
["XML_ID"]=>
string(5) "table"
}