Свойства типа "Список" в Битрикс — мощный инструмент для структурирования данных. Они часто используются для:
-
Классификации товаров (оптовый/розничный)
-
Меток ("для мужчин", "для женщин")
-
Статусов элементов
-
Любых других перечисляемых характеристик
В этой статье я подробно расскажу, как получить все значения такого свойства для дальнейшего использования в вашем проекте.
Основной способ (классический API)
Самый простой способ получить значения свойства — использовать метод CIBlockPropertyEnum::GetList.
<?
// Проверяем подключение модуля инфоблоков
if (CModule::IncludeModule("iblock")) {
// Параметры выборки
$arFilter = array(
"IBLOCK_ID" => 6, // ID вашего инфоблока
"CODE" => "PRESENTS" // символьный код свойства
);
// Сортировка
$arOrder = array(
"ID" => "ASC", // по ID
"SORT" => "ASC" // или по сортировке
);
// Получаем список значений
$property_enums = CIBlockPropertyEnum::GetList($arOrder, $arFilter);
if ($property_enums) {
// Перебираем результаты
while ($enum_fields = $property_enums->GetNext()) {
echo $enum_fields["ID"].": ".$enum_fields["VALUE"]."<br>";
// Доступные поля: XML_ID, SORT, PROPERTY_ID и др.
}
} else {
echo "Не удалось получить значения свойства";
}
} else {
echo "Модуль iblock не подключен";
}
?>Разберём параметры:
-
Фильтр ($arFilter):
-
IBLOCK_ID— обязательный параметр, ID вашего инфоблока -
CODE— символьный код свойства (можно использоватьIDвместо кода)
-
-
Сортировка ($arOrder):
-
Можно сортировать по
ID,VALUE,SORT,XML_ID -
Направление:
ASC(по возрастанию) илиDESC(по убыванию)
-
-
Доступные поля в результате:
-
ID— идентификатор значения -
VALUE— текстовое значение -
XML_ID— внешний код -
SORT— порядок сортировки -
PROPERTY_ID— ID самого свойства
-
Современный способ (D7 API)
Для новых проектов рекомендуется использовать объектный API (D7):
<?
use Bitrix\Iblock\PropertyEnumerationTable;
// Проверяем подключение модуля
if (Bitrix\Main\Loader::includeModule("iblock")) {
// Параметры выборки
$params = [
'select' => ['ID', 'VALUE', 'XML_ID', 'SORT'],
'filter' => [
'PROPERTY.IBLOCK_ID' => 6,
'PROPERTY.CODE' => 'PRESENTS'
],
'order' => ['SORT' => 'ASC']
];
// Получаем список
$result = PropertyEnumerationTable::getList($params);
while ($item = $result->fetch()) {
echo $item['ID'].": ".$item['VALUE']."<br>";
}
} else {
echo "Модуль iblock не подключен";
}
?>Преимущества D7 подхода:
-
Более современный синтаксис
-
Поддержка ORM
-
Возможность использовать цепочки вызовов
-
Лучшая производительность на больших объёмах данных
Практическое применение
Полученные значения можно использовать для:
-
Построения фильтров:
$filterValues = [];
$enums = CIBlockPropertyEnum::GetList([], ['IBLOCK_ID'=>6, 'CODE'=>'PRESENTS']);
while ($enum = $enums->GetNext()) {
$filterValues[$enum['ID']] = $enum['VALUE'];
}-
Генерации select-поля в формах:
<select name="present">
<?
$enums = CIBlockPropertyEnum::GetList(['SORT'=>'ASC'], ['IBLOCK_ID'=>6, 'CODE'=>'PRESENTS']);
while ($enum = $enums->GetNext()) {
echo '<option value="'.$enum['ID'].'">'.$enum['VALUE'].'</option>';
}
?>
</select>-
Создания тегового облака:
<div class="tags-cloud">
<?
$enums = CIBlockPropertyEnum::GetList([], ['IBLOCK_ID'=>6, 'CODE'=>'PRESENTS']);
while ($enum = $enums->GetNext()) {
echo '<a href="/filter/?present='.$enum['ID'].'" class="tag">'.$enum['VALUE'].'</a>';
}
?>
</div>Оптимизация работы
-
Кеширование результатов:
$cache = Bitrix\Main\Data\Cache::createInstance();
$cacheTime = 3600;
$cacheID = 'property_enums_'.$iblockID.'_'.$propertyCode;
$cachePath = '/property_enums/';
if ($cache->initCache($cacheTime, $cacheID, $cachePath)) {
$enums = $cache->getVars();
} elseif ($cache->startDataCache()) {
$enums = [];
$result = CIBlockPropertyEnum::GetList([], ['IBLOCK_ID'=>$iblockID, 'CODE'=>$propertyCode]);
while ($item = $result->GetNext()) {
$enums[] = $item;
}
$cache->endDataCache($enums);
}-
Использование в компонентах:
При создании комплексных компонентов можно передавать полученные значения в параметры:
$component->arParams['PROPERTY_VALUES'] = $enums;Частые проблемы и решения
Проблема 1: Свойство не находится по коду
Решение: Проверьте правильность написания кода или используйте ID свойства
Проблема 2: Значения не сортируются как ожидается
Решение: Убедитесь, что в админке задана правильная сортировка для каждого значения
Проблема 3: Низкая производительность при большом количестве значений
Решение: Реализуйте кеширование как показано выше или используйте D7 API
Заключение
Работа со значениями свойств типа "Список" в Битрикс — частая задача при разработке. В зависимости от ваших потребностей и версии Битрикс вы можете использовать:
-
Классический API (
CIBlockPropertyEnum::GetList) — для простых задач и поддержки старых проектов -
D7 API (
PropertyEnumerationTable) — для новых проектов с современной архитектурой
Не забывайте о кешировании результатов при частых запросах и правильно организуйте код для повторного использования в разных компонентах проекта.