Назад

Как вывести все значения свойства типа "Список" в Битрикс

Главная
Блог
Как вывести все значения свойства типа "Список" в Битрикс

Свойства типа "Список" в Битрикс — мощный инструмент для структурирования данных. Они часто используются для:

  • Классификации товаров (оптовый/розничный)

  • Меток ("для мужчин", "для женщин")

  • Статусов элементов

  • Любых других перечисляемых характеристик

В этой статье я подробно расскажу, как получить все значения такого свойства для дальнейшего использования в вашем проекте.

Основной способ (классический 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 не подключен";
}
?>

Разберём параметры:

  1. Фильтр ($arFilter):

    • IBLOCK_ID — обязательный параметр, ID вашего инфоблока

    • CODE — символьный код свойства (можно использовать ID вместо кода)

  2. Сортировка ($arOrder):

    • Можно сортировать по ID, VALUE, SORT, XML_ID

    • Направление: ASC (по возрастанию) или DESC (по убыванию)

  3. Доступные поля в результате:

    • 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

  • Возможность использовать цепочки вызовов

  • Лучшая производительность на больших объёмах данных

Практическое применение

Полученные значения можно использовать для:

  1. Построения фильтров:

$filterValues = [];
$enums = CIBlockPropertyEnum::GetList([], ['IBLOCK_ID'=>6, 'CODE'=>'PRESENTS']);
while ($enum = $enums->GetNext()) {
    $filterValues[$enum['ID']] = $enum['VALUE'];
}

  1. Генерации 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>

  1. Создания тегового облака:

<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>

Оптимизация работы

  1. Кеширование результатов:

$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);
}

  1. Использование в компонентах:
    При создании комплексных компонентов можно передавать полученные значения в параметры:

$component->arParams['PROPERTY_VALUES'] = $enums;

Частые проблемы и решения

Проблема 1: Свойство не находится по коду
Решение: Проверьте правильность написания кода или используйте ID свойства

Проблема 2: Значения не сортируются как ожидается
Решение: Убедитесь, что в админке задана правильная сортировка для каждого значения

Проблема 3: Низкая производительность при большом количестве значений
Решение: Реализуйте кеширование как показано выше или используйте D7 API

Заключение

Работа со значениями свойств типа "Список" в Битрикс — частая задача при разработке. В зависимости от ваших потребностей и версии Битрикс вы можете использовать:

  1. Классический API (CIBlockPropertyEnum::GetList) — для простых задач и поддержки старых проектов

  2. D7 API (PropertyEnumerationTable) — для новых проектов с современной архитектурой

Не забывайте о кешировании результатов при частых запросах и правильно организуйте код для повторного использования в разных компонентах проекта.

Нужен надежный исполнитель?
Разрабатываем сайты, выполняем миграцию на Битрикс, дорабатываем функционал, сопровождаем проекты, а также занимаемся поисковым продвижением и комплексным маркетингом
Получить консультацию
Читайте по теме
Все статьи
Нужен надежный исполнитель?
Разрабатываем сайты, выполняем миграцию на Битрикс, дорабатываем функционал, сопровождаем проекты, а также занимаемся поисковым продвижением и комплексным маркетингом
Получить консультацию
Все статьи