-
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, а второй — массив параметров, которые мы будем переписывать, при формировании ссылки. Таким образом мы будем получать всегда нормальные, работающие урлы.
Вот пожалуй и все, остальное уже дело техники
поправили, спасибо.
В примере кода ошибка в If операторе при сравнении метода. // Неверно $_GET["method" == "asc"] // Верно $_GET["method"] === "asc" Эта ошибка во всех сравнениях. В остальном отлично работает. Спасибо, что сэкономили время.