Дата последнего изменения: 09.11.2023
Для выполнения сортировки в компоненте news.list или catalog.section.list компоненту необходимо передать параметры ELEMENT_SORT_FIELD
и ELEMENT_SORT_ORDER
.
Сортировку можно произвести по стандартным полям, для чего можно воспользоваться приведенным ниже списком:
Также сортировать можно по созданным вами свойствам элемента информационного блока:
Тип сортировки указывается в соответствии со списком:
Самый простой способ передать новые параметры для сортировки в компонент - это использовать $_GET запрос и передать соответствующие переменные.
Также можно воспользоваться $_SESSION и записать переменные в массив переменных сессии. Предположим нам необходимо сделать ссылки или кнопки(название, цена, лидер продаж, дата поступления) для сортировки товаров в разделе каталога (используем комплексный компонент catalog). После того как мы скопировали шаблон, необходимо открыть файл section.php и внести в него следующие модификации перед подключением компонента bitrix:catalog.section.list:
<?if ( isset($_GET["sort"]) && isset($_GET["method"]) && ( $_GET["sort"] == "name" || $_GET["sort"] == "catalog_PRICE_3" || $_GET["sort"] == "property_PRODUCT_TYPE" || $_GET["sort"] == "timestamp_x")){ $arParams["ELEMENT_SORT_FIELD"] = $_GET["sort"]; $arParams["ELEMENT_SORT_ORDER"] = $_GET["method"]; }?>
Этот код необходим для изменения параметров сортировки в компоненте. Далее откроем файл template.php компонента catalog.section и добавим ссылки управления сортировками:
<p class="sort">Сортировка: <a <?if ($_GET["sort"] == "name"):?> class="active" <?endif;?>href="<?=$arResult["SECTION_PAGE_URL"]?>?sort=name&method=asc">название</a> <a <?if ($_GET["sort"] == "catalog_PRICE_3"):?> class="active" <?endif;?>href="<?=$arResult["SECTION_PAGE_URL"]?>?sort=catalog_PRICE_3&method=asc">цена</a> <a <?if ($_GET["sort"] == "property_PRODUCT_TYPE"):?> class="active" <?endif;?>href="<?=$arResult["SECTION_PAGE_URL"]?>?sort=property_PRODUCT_TYPE&method=desc">лидер продаж</a> <a <?if ($_GET["sort"] == "timestamp_x"):?> class="active" <?endif;?>href="<?=$arResult["SECTION_PAGE_URL"]?>?sort=timestamp_x&method=desc">дата поступления</a> </p>
Данную сортировку можно выполнить без перезагрузки страницы с использованием jQuery либо JS-библиотеки Bitrix Framework.
В случае использования отдельного компонента catalog.section.list или news.list необходимо четко понимать, что редактировать сортировку данных в компоненте через визуальный редактор будет нельзя.
Перед вызовом компонента разместить код:
<? $sortField = 'ID'; // поле сортировки по умолчанию $sortOrder = 'ASC'; // направление сортировки по умолчанию if ( isset($_GET["sort"]) && isset($_GET["method"]) && ( $_GET["sort"] == "name" || $_GET["sort"] == "catalog_PRICE_3" || $_GET["sort"] == "property_PRODUCT_TYPE" || $_GET["sort"] == "timestamp_x")){ $sortField = $_GET["sort"]; $sortOrder = $_GET["method"]; } ?>
<?$APPLICATION->IncludeComponent( "bitrix:catalog.section", "", array( ... // остальные настройки компонента "ELEMENT_SORT_FIELD" => $sortField, "ELEMENT_SORT_ORDER" => $sortOrder, ... // еще настройки компонента ); );?>