Вопрос о свойствах в выводимом списке при использовании функции getList в 1C-Bitrix достаточно актуален, так как это может вызывать некоторую путаницу.
Для начала, давайте рассмотрим саму функцию getList. Она используется для выборки элементов из инфоблока с заданными параметрами. Одним из параметров является массив "select", который определяет, какие поля элементов будут выбраны для вывода. Но, к сожалению, при использовании этого массива свойства элементов не содержатся в выводимом списке по умолчанию.
Но не стоит отчаиваться! В 1C-Bitrix есть несколько способов, как можно получить вывод свойств наряду с другими полями. Вот некоторые из них:
1. Добавление свойств в массив "select":
$arSelect = array( "ID", "NAME", "PROPERTY_COLOR", "PROPERTY_SIZE" ); $arFilter = array( "IBLOCK_ID" => IBLOCK_ID, "ACTIVE" => "Y" ); $res = CIBlockElement::GetList( array(), $arFilter, false, false, $arSelect ); while($ob = $res->GetNextElement()){ $arFields = $ob->GetFields(); $arProperties = $ob->GetProperties(); // Далее обрабатываем результаты выборки // ... }
2. Получение свойств через объект-элемент:
$arFilter = array( "IBLOCK_ID" => IBLOCK_ID, "ACTIVE" => "Y" ); $res = CIBlockElement::GetList( array(), $arFilter, false, false ); while($ob = $res->GetNextElement()){ $arFields = $ob->GetFields(); $arProperties = $ob->GetProperties(); // Далее обрабатываем результаты выборки // ... }
3. Использование соединения свойств с элементами через JOIN:
$arSelect = array( "ID", "NAME", "PROPERTY_COLOR", "PROPERTY_SIZE" ); $arFilter = array( "IBLOCK_ID" => IBLOCK_ID, "ACTIVE" => "Y" ); $res = CIBlockElement::GetList( array(), $arFilter, false, false, $arSelect ); while($arFields = $res->GetNext()){ // Для каждого поля выборки, кроме свойств, // выполняем отдельный запрос для получения свойств foreach($arSelect as $field){ if(strpos($field, "PROPERTY_") === 0){ $propCode = str_replace("PROPERTY_", "", $field); $propValue = CIBlockFormatProperties::GetDisplayValue($arFields, $arFields["PROPERTIES"][$propCode], "news_out"); $arFields[$field] = $propValue["DISPLAY_VALUE"]; } } // Далее обрабатываем результаты выборки // ... }
Выбор того или иного способа зависит от вашего конкретного случая, требований и ограничений. Первый способ самый простой и непосредственный, но может привести к большому количеству запросов к базе данных. Второй и третий способы являются более оптимальными с точки зрения производительности.
Таким образом, если вам необходимо получить свойства элементов вместе с другими полями при использовании функции getList в 1C-Bitrix, вы можете использовать описанные выше методы.