В компонентах каталога 1С-Битрикс (bitrix:catalog, bitrix:catalog.section, bitrix:catalog.top и др.) сортировка элементов управляется через группы параметров ELEMENT_SORT_*. Рассмотрим оба варианта.
1. Сортировка через настройки компонента (административный интерфейс)
При редактировании страницы или компонента в публичной части откройте параметры компонента и найдите вкладку Источник данных. Там есть следующие параметры:
- ELEMENT_SORT_FIELD — поле для первой сортировки;
- ELEMENT_SORT_ORDER — направление сортировки (ASC — по возрастанию, DESC — по убыванию);
- ELEMENT_SORT_FIELD2 — поле для второй сортировки (при равенстве значений первого поля);
- ELEMENT_SORT_ORDER2 — направление второй сортировки.
2. Допустимые значения для полей сортировки
В параметр ELEMENT_SORT_FIELD можно передавать:
name— сортировка по названию элемента (полю NAME инфоблока);sort— сортировка по индексу сортировки (SORT);id— сортировка по ID элемента;active_from— по дате начала активности;timestamp_x— по дате последнего изменения;created— по дате создания;CATALOG_PRICE_1— сортировка по цене (где 1 — ID типа цены, например «Розничная цена»);SCALED_PRICE_1— сортировка по масштабированной цене (рекомендуется для типов цен с разным количеством знаков после запятой);PROPERTY_XXX— сортировка по пользовательскому свойству с кодом XXX.
3. Примеры настройки
Сортировка по названию (по возрастанию, A→Я):
ELEMENT_SORT_FIELD = name
ELEMENT_SORT_ORDER = ASC
Сортировка по цене (сначала дешёвые):
ELEMENT_SORT_FIELD = CATALOG_PRICE_1
ELEMENT_SORT_ORDER = ASC
Сортировка по цене (сначала дорогие):
ELEMENT_SORT_FIELD = CATALOG_PRICE_1
ELEMENT_SORT_ORDER = DESC
Сначала по названию, при совпадении — по цене (от меньшей к большей):
ELEMENT_SORT_FIELD = name
ELEMENT_SORT_ORDER = ASC
ELEMENT_SORT_FIELD2 = CATALOG_PRICE_1
ELEMENT_SORT_ORDER2 = ASC
4. Интерактивная сортировка на странице каталога (пользовательская)
Если нужно дать возможность пользователю самому выбирать сортировку (по названию, цене, новизне), используется компонент bitrix:catalog.smart.filter в связке с сортировкой через $_REQUEST. В шаблоне компонента каталога добавляется форма переключения сортировки, а значения передаются через URL-параметры sort и order.
Типовой код переключателя сортировки в шаблоне каталога:
<?php
// Получаем текущие параметры сортировки из URL
$sortField = $_REQUEST['sort'] ?? 'sort';
$sortOrder = $_REQUEST['order'] ?? 'asc';
?>
<div class="catalog-sorter">
<a href="?sort=name&order=asc">Название (А-Я)</a>
<a href="?sort=name&order=desc">Название (Я-А)</a>
<a href="?sort=CATALOG_PRICE_1&order=asc">Цена (по возрастанию)</a>
<a href="?sort=CATALOG_PRICE_1&order=desc">Цена (по убыванию)</a>
</div>
Затем в файле result_modifier.php шаблона компонента нужно подменить параметры сортировки перед вызовом CIBlockElement::GetList:
<?php
if (isset($_REQUEST['sort']))
{
$arParams['ELEMENT_SORT_FIELD'] = $_REQUEST['sort'];
$arParams['ELEMENT_SORT_ORDER'] = ($_REQUEST['order'] ?? 'asc') === 'desc' ? 'DESC' : 'ASC';
}
?>
5. Программная сортировка через CIBlockElement::GetList
Если вы работаете напрямую с API (модуль iblock, класс CIBlockElement, файл /bitrix/modules/iblock/classes/mysql/iblockelement.php), сортировка задаётся первым параметром метода GetList:
<?php
$arSort = [
'NAME' => 'ASC', // по названию (A→Я)
'CATALOG_PRICE_1' => 'ASC', // затем по цене (сначала дешёвые)
];
$dbElements = CIBlockElement::GetList(
$arSort,
$arFilter,
false,
$arNavParams,
$arSelect
);
?>
Важно: для сортировки по цене через CIBlockElement::GetList необходимо, чтобы модуль catalog был подключён (CModule::IncludeModule('catalog')).
6. Сортировка через D7 ORM (Bitrix\Iblock\ElementTable)
<?php
use Bitrix\Iblock\ElementTable;
$result = ElementTable::getList([
'order' => [
'NAME' => 'ASC',
'CATALOG_PRICE_1' => 'ASC',
],
'filter' => ['IBLOCK_ID' => $iblockId],
'select' => ['ID', 'NAME'],
]);
?>
Если у вас остались вопросы по конкретному компоненту или нестандартному кейсу — уточните, какой именно компонент вы используете и какую сортировку хотите реализовать.