Назад

Сортировка элементов по свойству типа "Список" в Битрикс

Главная
Блог
Сортировка элементов по свойству типа "Список" в Битрикс

Сортировка элементов инфоблоков по свойствам-спискам — важная задача при создании каталогов, фильтров и систем управления контентом в Битрикс. В отличие от простых свойств, работа со списками требует особого подхода, так как порядок элементов должен соответствовать не алфавиту или ID, а строгой последовательности, заданной администратором.

В этом руководстве вы найдете:

  • Правильный синтаксис для сортировки в компонентах и D7

  • Как Битрикс обрабатывает такие запросы "под капотом"

  • 3 частые ошибки и способы их исправления

  • Оптимизацию для проектов с 10 000+ элементов

Материал особенно полезен для:

  • Разработчиков интернет-магазинов

  • Администраторов корпоративных сайтов

  • Специалистов по интеграции Битрикс

Пример из практики: при сортировке статусов заказов ("Новый", "В обработке", "Выполнен") важно сохранить именно эту последовательность, а не алфавитный порядок.

1. Основной способ сортировки

Для корректной сортировки по свойству типа "Список" используйте префикс propertysort_:

// В настройках компонента
"SHOW_ALL_WO_SECTION" => "Y",
"SORT_BY1" => "propertysort_STATUS",  // STATUS — символьный код свойства
"SORT_ORDER1" => "ASC"               // Порядок: ASC (по возрастанию) или DESC (по убыванию)

Как это работает:

  1. Битрикс использует таблицу b_iblock_property_enum

  2. Сортировка происходит по полю SORT, которое соответствует порядку значений в админке

  3. Результат не зависит от алфавитного порядка или ID значений

2. Настройка порядка сортировки

Порядок определяется в административном интерфейсе:

  1. Перейдите: Инфоблоки → Свойства → Нужное свойство → Список

  2. Измените порядок значений с помощью стрелок

  3. Сохраните изменения

Рис. 1: Пример настройки порядка значений списка в админке Битрикс

3. Техническая реализация

Генерируемый SQL-запрос

SELECT 
    be.*,
    bps.VALUE as PROPERTY_STATUS,
    bps_enum.SORT as STATUS_SORT
FROM 
    b_iblock_element be
LEFT JOIN 
    b_iblock_element_property bps ON (be.ID = bps.IBLOCK_ELEMENT_ID)
LEFT JOIN 
    b_iblock_property_enum bps_enum ON (bps.VALUE = bps_enum.ID)
WHERE 
    be.IBLOCK_ID = [ID_инфоблока]
ORDER BY 
    bps_enum.SORT ASC  -- Сортировка по заданному порядку

Особенности для разных компонентов

Компонент Синтаксис
news.list "SORT_BY1" => "propertysort_"
catalog.section "ELEMENT_SORT_FIELD" => "propertysort_"
D7 'order' => ['propertysort_' => 'ASC']

4. Решение проблем

Частые ошибки

Неправильный синтаксис

"PROPERTY_STATUS" => "ASC"  // Не работает для списков!

Пустые значения
Используйте параметр для их исключения:

"STRICT_SORT_CHECK" => "Y"  

Смешанные типы данных
Убедитесь, что все значения в списке одного типа.

Оптимизация

Для ускорения добавьте индекс:

ALTER TABLE b_iblock_property_enum 
ADD INDEX ix_sort (IBLOCK_PROPERTY_ID, SORT);

5. Продвинутые техники

Динамическое изменение сортировки

AddEventHandler("iblock", "OnBeforeIBlockElementGetList", function(&$arOrder) {
    if ($_GET['sort'] == 'custom') {
        $arOrder['propertysort_STATUS'] = 'DESC';
    }
});

Совместная сортировка

"SORT_BY1" => "propertysort_PRIORITY",
"SORT_ORDER1" => "DESC",
"SORT_BY2" => "NAME",
"SORT_ORDER2" => "ASC"

Заключение

Для правильной сортировки по свойствам-спискам:

  1. Всегда используйте префикс propertysort_

  2. Настраивайте порядок значений в админке

  3. Проверяйте SQL-запросы через EXPLAIN

  4. Для сложных случаев применяйте обработчики событий

Дополнительные материалы:

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