Сегодня хочу рассказать, как реализовать блок сортировки товаров как на рис. 1 в шаблоне компонента bitrix: catalog
. Я покажу, как отсортировать по цене и свойству «Бренд»(строкового типа).
Заходим в раздел каталога с публичной части сайта: Каталог –Редактировать шаблон компонента
(рис. 2)
Откроется файл section.php
шаблона комплексного каталога. Выделите блок под сортировку (он должен выводиться раньше подключения компонента bitrix:catalog.section
) и добавляем следующий код:
<?php
printf('<span>Сортировать по: </span>
<a href="%s" class="'.$price.'">цене</a> |
<a href="%s" class="'.$brend.'">бренду</a>',
$APPLICATION->GetCurPageParam("sort=price",array("sort"), false),
$APPLICATION->GetCurPageParam("sort=Brend",array("sort"), false)
);
?>
Теперь по порядку:
- Переменные, подставляемые в классы тегов а, нужны будут для выделения, чтобы мы знали, по какому свойству отсортированы товары сейчас. На рис. 1 выше это «по популярности».
- Функция
$APPLICATION->GetCurPageParam()
Возвращает путь к текущей странице относительно корня c добавленными новыми и(или) удаленными текущими параметрами. Может принимать 3 аргумента. Рассмотрим на примере:
$APPLICATION->GetCurPageParam("sort=Brend",array("sort"), false)
- 1-ый параметр: к текущему пути добавится «
sort=Brend
» ; - 2-ой параметр: из текущего пути удалится параметр «
sort
» т.е. , если товары уже были отсортированы, то предыдущая сортировка удаляется; - 3-ий параметр:
false
, значит из возвращаемого url страницы будет удаленоindex.php;
Html код с php вставками блока сортировки добавили. Теперь до этого кода нужно добавить php код:
<?php
if ($_GET["sort"] == "price")
{
$arParams["TOP_ELEMENT_SORT_FIELD"] = "property_PRICE_1";
$price="asortvibor";
$brend="";
}
if ($_GET["sort"] == "Brend")
{
$arParams["TOP_ELEMENT_SORT_FIELD"] = "property_Brendy";
$brend="asortvibor";
$price="";
}
?>
Разберем основные моменты:
$arParams["TOP_ELEMENT_SORT_FIELD"] = "catalog_PRICE_1" ;
Здесь вместо «1
» должен стоять id
типа цен. У меня ID
базового типа цен = «1
»
$arParams["TOP_ELEMENT_SORT_FIELD"] = "property_Brend";
Здесь вместо «Brend
» должен стоять символьный код свойства, если оно строкового типа. В моём случае символьный код свойства Бренд — «Brend
» . Всё, редактирование файла на этом закончено. В результате добавленных строк значение переменной $arParams["TOP_ELEMENT_SORT_FIELD"]
передастся на вход компоненту bitrix:catalog.section
и в результате вы увидите товары в разделе отсортированы по свойству
нужному вам . По аналогии можно добавить сортировку по убыванию и выводимое кол-во товаров на странице. Спасибо за внимание!
если всё равно не понятно, почитайте тут. Курс Разработчик Bitrix Framework Рассказывается о Сортировка в компонентах news.list и catalog.section .
Спасибо за заметку. Помогло сделать задачу быстрее :)
А как вывести сортировку по выводимому кол-ве товаров на странице?
куда вставить ?????
printf('Сортировать по: цене | бренду',
$APPLICATION->GetCurPageParam("sort=price",array("sort"), false),
$APPLICATION->GetCurPageParam("sort=Brend",array("sort"), false)
);
?>
вставил в bitrix:catalog.section
в section.php до подключения компонента bitrix:catalog.section
Спасибо! Работает :)
Чтобы не писать сортировку каждый раз вручную, сделал бесплатное решение для вывода панели сортировки по стандартным полям таким как активность, популярность, название, , вес сортировки итд, по свойствам инфоблока, а так же по цене.
Можете установить через маркетплейс:
https://marketplace.1c-bitrix.ru/solutions/codeblogpro.sortpanel/?sphrase_id=54141815
В описании модуля на маркетплейсе есть видео с примером установки модуля и добавлением компонента sort.panel на страницу сайта.
P.S. решение так же предоставляет возможность сохранять выбранные параметры сортировки в сессии , чтобы выбранная сортировка сохранялась при переходе от раздела к разделу ( но это функция опциональная. Её можно выключить в настройках компонента).
С уважением.