Задача: У разделов инфоблока есть множественное поле типа список. Зная ID раздела, нужно получить и вывести всю информацию о выбранных значениях списка UF_ поля этого раздела.
В принципе эта заметка подойдет для получения значений любого UF поля, не обязательно связанного с разделом. Сработает для любого множественного пользовательского поля.
Получаем UF поля раздела инфоблока
Есть множественное пользовательское поле раздела "Способы доставки" типа список, с кодом UF_DELIVERY_TYPE. Что бы получить это поле используем CIBlockSection::GetList.

$dbList = CIBlockSection::GetList(
false,
array(
'IBLOCK_ID' => '2', // ID инфоблока
'ID' => '27', // ID раздела
),
false,
array(
'ID',
'UF_DELIVERY_TYPE' // UF поле
)
);
while ($arResult = $dbList->Fetch()) {
print_r($arResult['UF_DELIVERY_TYPE']);
}
Зная ID инфоблока и раздела получили значение поля UF_DELIVERY_TYPE. Но, так как поле множественное, увидем только ID значений выбранных в этом поле. Нам нужна вся информация о каждом выбранном значении (название, xml-id и.т.д.)
Не множественные значения пользовательских полей получите сразу и со всей информацией. Что-бы получить все пользовательские поля, не обязательно перечислять каждое, достаточно указать UF_* в отборе.
Получаем значения множественного пользовательского поля UF по id значений.
Что бы получить значения со всей информацией о выбранных пунктах списка, множественного поля, используем CUserFieldEnum::GetList- передав в его фильтр id выбранных, в разделе, значений UF_DELIVERY_TYPE
$obEnum = new \CUserFieldEnum; // вкл метод
$dbList = CIBlockSection::GetList(
false,
array(
'IBLOCK_ID' => '2', // ID инфоблока
'ID' => '27', // ID раздела
),
false,
array(
'ID',
'UF_DELIVERY_TYPE' // UF поле
)
);
while ($arResult = $dbList->Fetch()) {
$rsData = $obEnum->GetList(
array(),
array(
"ID" => $arResult['UF_DELIVERY_TYPE']
// перебор полученных id значений
)
);
while ($arEnum = $rsData->Fetch()) {
$arTypes[] = $arEnum;
}
}
print_r($arTypes);
На этом все. В массиве $arTypes будут все значения, выбранные для раздела в пользовательском поле UF_DELIVERY_TYPE, со всеми данными о каждом пункте.

Bitrix\Iblock\SectionTable::GetList
не даст получить именно UF поля (без танцев и бубна):
Вроде банальный вопрос, но поиск корректных результатов не дает.
Подскажите, пожалуйста, как вывести UF_ поле на странице РАЗДЕЛА (в catalog.section.list). UF поле - тип строка.
Спасибо

В настройках компонента:
Код |
---|
<?$APPLICATION->IncludeComponent("bitrix:catalog.section.list","", Array( "VIEW_MODE" => "TEXT", "SHOW_PARENT_NAME" => "Y", "IBLOCK_TYPE" => "", "IBLOCK_ID" => "", "SECTION_ID" => $_REQUEST["SECTION_ID"], "SECTION_CODE" => "", "SECTION_URL" => "", "COUNT_ELEMENTS" => "Y", "TOP_DEPTH" => "2", "SECTION_FIELDS" => "" "SECTION_USER_FIELDS" => => array( 0 => 'UF_ПОЛЕ' ), "ADD_SECTIONS_CHAIN" => "Y", "CACHE_TYPE" => "A", "CACHE_TIME" => "36000000", "CACHE_NOTES" => "", "CACHE_GROUPS" => "Y" ) );?> |
В шаблоне:
Код |
---|
<?=$arSection['UF_ПОЛЕ']?> |
В catalog.section.list - не работает

Цитата |
---|
Андрей написал: В catalog.element - работает и работало, вопросов нет. В catalog.section.list - не работает |
Затрудняюсь подсказать. Что-то делаете не правильно или у вас что-то не стандартное.
Я нашел еще и такое решение, может кому пригодится:
Код |
---|
<? $rsResult = CIBlockSection::GetList(array("SORT" => "ASC"), array("IBLOCK_ID" => "АЙДИ-ИНФОБОКА", "ID" => $arResult['SECTION']['ID']), false, $arSelect = array("UF_*")); if($secResult = $rsResult -> GetNext()){ } ?> <?echo $secResult["UF_ИМЯПОЛЯ"];?> |