
Получается следующая ситуация.
Метод
CIBlockSection::GetList() принимает параметры:
$arOrder -
порядок сортировки, описан в документации$arFilter -
фильтрация, описана в документации$bIncCnt -
флаг "выводить ли количество элементов", описан в документации, по умолчанию false$arSelect - список пользовательских полей, которые надо вернуть, по умолчанию array()$arSelect имеет следующий синтаксис:
1)
array() -
не выбирать пользовательские поляCIBlockSection::GetList($arOrder, $arFilter, false, array())
для этого случая можно просто не указывать последний параметр2)
array($name [, $name2 ...]) -
выбрать только указанные в массиве пользовательские поляCIBlockSection::GetList($arOrder, $arFilter, false, array('UF_TYPE')) добавит к результату ключ UF_TYPE
CIBlockSection::GetList($arOrder, $arFilter, false, array('UF_TYPE', 'UF_STATUS')) добавит к результату ключи UF_TYPE и UF_STATUS
и т.п.3)
array('UF_*') - выбрать все пользовательские поля по маске
CIBlockSection::GetList($arOrder, $arFilter, false, array('UF_*'))
если у группы есть пользовательские поля UF_TYPE, UF_STATUS и UF_VERSION, к результату будут добавлены все
Тут возникает вопрос. Можно ли эту маску использовать произвольно, например
CIBlockSection::GetList($arOrder, $arFilter, false, array('*'));или
CIBlockSection::GetList($arOrder, $arFilter, false, array('_*'));и т.п.?

Для тех, кто считает, что между конструкциями
CIBlockSection::GetList($arOrder, $arFilter, false, array('UF_*'));и
CIBlockSection::GetList($arOrder, $arFilter, false, $arSelect = array('UF_*'));есть какая-то разница в выполнении метода, спешу сообщить, что её нет. Последняя конструкция аналогична следующему коду:
$arSelect = array('UF_*');
CIBlockSection::GetList($arOrder, $arFilter, false, $arSelect);
Наблюдается интересная особенность. Если в фильтре не указать параметр 'IBLOCK_ID', выборка не вернёт пользовательские поля.
Т.о. такой код будет работать правильно:
CIBlockSection(array(), array('IBLOCK_ID' => $iblock_id, 'ID' => $id), false, array('UF_*'));а такой уже нет:
CIBlockSection(array(), array('ID' => $id), false, array('UF_*'));Но это ещё полбеды. Если я хочу для переносимости кода между базами использовать вместо 'IBLOCK_ID' фильтр по 'IBLOCK_CODE', то пользовательские поля получены не будут. Такой код не будет работать, как ожидается:
CIBlockSection(array(), array('IBLOCK_CODE' => $iblock_code, 'ID' => $id), false, array('UF_*'));