Сортировка товаров в каталоге Bitrix

  • Vadim Tsukanov
    Разработчик
  • Дата публикации
    30.05.2021
  • Категория
    1С-Битрикс
сортировка товаров битрикс
Задача:Сортировать торговый каталог Битрикс по цене, свойству и имени

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

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

Итак, в section.php комплексного компонента «каталог» пишем:

if(
    isset($_GET["sort"]) && isset($_GET["method"]) && (
    $_GET["sort"] == "name" ||
    $_GET["sort"] == "catalog_PRICE_1" ||
    $_GET["sort"] == "property_NOVINKA")
)
{
$arParams["ELEMENT_SORT_FIELD"] = $_GET["sort"];
$arParams["ELEMENT_SORT_ORDER"] = $_GET["method"];
}

В строке перебора будет столько условий, сколько у вас сортировок, у меня сортировка идет по имени, цене и свойству — «НОВИНКА».

Для сортировки по цене необходимо в поле дописать ID цены, в моем случае — 1, однако бывает по разному — обратите на это внимание!

Теперь формируем список:

<ul class="options" id="sort-options">
	<li <?if ($_GET["sort"] == "catalog_PRICE_1" AND $_GET["method"] == "asc"):?> class="active" <?endif;?> data-href="<?=$APPLICATION->GetCurPageParam('sort=catalog_PRICE_1&method=asc',array('sort','method'), false)?>">Цена на повышение</li>
	<li <?if ($_GET["sort"] == "catalog_PRICE_1" AND $_GET["method"] == "desc"):?> class="active" <?endif;?> data-href="<?=$APPLICATION->GetCurPageParam('sort=catalog_PRICE_1&method=desc',array('sort','method'), false)?>">Цена на понижение</li>
	<li <?if (empty($_GET["sort"]) AND empty($_GET["method"]) ):?> class="active" <?endif;?> data-href="<?=$APPLICATION->GetCurPage()?>">Название А-Я</li>
	<li <?if ($_GET["sort"] == "name" AND $_GET["method"] == "desc"):?> class="active" <?endif;?> data-href="<?=$APPLICATION->GetCurPageParam('sort=name&method=desc',array('sort','method'), false)?>">Название Я-А</li>
	<li <?if ($_GET["sort"] == "property_NOVINKA"):?> class="active" <?endif;?>data-href="<?=$APPLICATION->GetCurPageParam('sort=property_NOVINKA&method=desc',array('sort','method'), false)?>">Новинки</li>
</ul>

Тут 2 важных момента:

1. Для определения текущего элемента в списке будем использовать класс «active»,чтобы это сделать — пишем условие типа

<?if ($_GET["sort"] == "catalog_PRICE_1" AND $_GET["method" == "asc"]):?>

2. Для того, чтобы ссылки формировались правильно и учитывались GET параметры, нам необходимо воспользоваться битриксовым методом GetCurPageParam().

data-href="<?=$APPLICATION->GetCurPageParam('sort=catalog_PRICE_1&method=asc',array('sort','method'), false)?>

Первый аргумент — это наши параметры, которые необходимо подставить в URl, а второй — массив параметров, которые мы будем переписывать, при формировании ссылки. Таким образом мы будем получать всегда нормальные, работающие урлы.

Вот пожалуй и все, остальное уже дело техники

2 Комментариев
  • muzanaka
    2023-12-29 08:39:00

    поправили, спасибо.

  • Дмитрий
    2023-09-06 07:47:36

    В примере кода ошибка в If операторе при сравнении метода. // Неверно $_GET["method" == "asc"] // Верно $_GET["method"] === "asc" Эта ошибка во всех сравнениях. В остальном отлично работает. Спасибо, что сэкономили время.

Оформить заказ в Devstages