Получение вариантов из поля типа «Список» для HL-блока
Как получить данные из пользовательского поля типа «Список» для Highload-блока
При добавлении или получении данных Highload-блока через API иногда встает проблема, как корректно получить данные из пользовательского поля с типом «Список».
Для получения данных предлагаю следующую удобную функцию:
<?php
function get_enum_values_by_hl_field_code($code, $hlId)
{
$property = CUserTypeEntity::GetList([], ['ENTITY_ID' => 'HLBLOCK_' . $hlId, 'FIELD_NAME' => $code])->Fetch();
if ($property && $property['USER_TYPE_ID'] === 'enumeration') {
$fieldEnums = CUserFieldEnum::GetList([], ['USER_FIELD_ID' => $property['ID']]);
$result = [];
while ($enumFields = $fieldEnums->GetNext()) {
$resultInfo = [
'ID' => $enumFields['ID'],
'VALUE' => $enumFields['VALUE'],
'XML_ID' => $enumFields['XML_ID'],
];
$result['BY_ID'][$enumFields['ID']] = $resultInfo;
$result['BY_XML_ID'][$enumFields['XML_ID']] = $resultInfo;
$result['BY_VALUE'][$enumFields['VALUE']] = $resultInfo;
}
return $result;
}
return false;
}
Функция принимает на вход символьный код пользовательского поля и ID HL-блока. А возвращает массив из 3 элементов, внутри которых уже лежат все варианты значений поля: по ID, по XML_ID, по значению.
[
"BY_ID" => [
48 => [
"ID" => "48",
"VALUE" => "Apple",
"XML_ID" => "apple",
],
49 => [
"ID" => "49",
"VALUE" => "Samsung",
"XML_ID" => "samsung",
],
50 => [
"ID" => "50",
"VALUE" => "Xiaomi",
"XML_ID" => "xiaomi",
],
],
"BY_XML_ID" => [
"apple" => [
"ID" => "48",
"VALUE" => "Apple",
"XML_ID" => "apple",
],
"samsung" => [
"ID" => "49",
"VALUE" => "Samsung",
"XML_ID" => "samsung",
],
"xiaomi" => [
"ID" => "50",
"VALUE" => "Xiaomi",
"XML_ID" => "xiaomi",
],
]
"BY_VALUE" => [
"Apple" => [
"ID" => "48",
"VALUE" => "Apple",
"XML_ID" => "apple",
],
"Samsung" => [
"ID" => "49",
"VALUE" => "Samsung",
"XML_ID" => "samsung",
],
"Xiaomi" => [
"ID" => "50",
"VALUE" => "Xiaomi",
"XML_ID" => "xiaomi",
],
],
]
Также можете посмотреть получение вариантов из свойства типа «Список» в инфоблоке.
Оставьте комментарий
Если эта статья была полезной для вас, оставьте комментарий ниже или задайте интересующий Вас вопрос. Ваш опыт может помочь другим читателям!
Написать комментарий