При работе с API Битрикс иногда возникают сложности с получением всех значений свойства типа «Список», особенно если оно множественное. В этой статье разберем, как правильно выводить данные, используя метод CIBlockElement::GetProperty.
Базовый пример получения значений свойства
Документация Битрикс предлагает следующий код:
$VALUES = array();
$res = CIBlockElement::GetProperty($IBLOCK_ID, $ELEMENT_ID, array("sort" => "asc"), array("CODE" => "COLORS"));
while ($ob = $res->GetNext()) {
$VALUES[] = $ob['VALUE'];
}Разберем параметры:
-
$IBLOCK_ID– ID инфоблока. -
$ELEMENT_ID– ID элемента. -
array("sort" => "asc")– сортировка. -
array("CODE" => "COLORS")– фильтр по символьному коду свойства.
Дополнительные фильтры для выборки
Можно фильтровать не только по CODE, но и по другим параметрам:
-
NAME– название свойства (можно использовать%и_). -
ID– ID свойства. -
ACTIVE– активность (Y/N). -
SEARCHABLE– участвует в поиске (Y/N). -
PROPERTY_TYPE– тип свойства. -
EMPTY– проверка на пустоту (Y/N).
Расширенный пример с обработкой изображений
Если свойство содержит привязку к элементам или файлам (например, цвета товара с картинками), можно использовать такой код:
$VALUES = array();
$res = CIBlockElement::GetProperty(1, $arResult['ID'], "sort", "asc", array("CODE" => "COLORS"));
$b = 0;
while ($ob = $res->GetNext()) {
// Ищем элемент по описанию (например, название цвета)
$my_elements = CIBlockElement::GetList(
array("ID" => "ASC"),
array("IBLOCK_ID" => 19, "NAME" => $ob['DESCRIPTION']),
false,
false,
array('ID', 'PREVIEW_PICTURE')
);
if ($ar_fields = $my_elements->GetNext()) {
$VALUES[$b]['BG'] = CFile::GetPath($ar_fields['PREVIEW_PICTURE']);
}
$VALUES[$b]['IMG'] = CFile::GetPath($ob['VALUE']);
$VALUES[$b]['DESC'] = $ob['DESCRIPTION'];
$b++;
}Что происходит в коде:
-
Получаем значения свойства
COLORSдля элемента. -
Для каждого значения (
$ob) ищем связанный элемент по его описанию (DESCRIPTION). -
Если элемент найден, сохраняем его превью-изображение.
-
Добавляем путь к изображению свойства и его описание в массив
$VALUES.
Вывод
Используя CIBlockElement::GetProperty, можно гибко получать данные свойств типа «Список» в Битрикс. Для работы с файлами (например, картинками) применяйте CFile::GetPath.
Официальная документация: CIBlockElement::GetProperty