Сортировка товаров по свойству в Битрикс.

Сегодня хочу рассказать, как  реализовать блок сортировки товаров как на рис. 1  в шаблоне компонента bitrix: catalog. Я покажу, как отсортировать по цене и свойству «Бренд»(строкового типа).

sortirovka
рис. 1

Заходим в раздел каталога с публичной части сайта: Каталог –Редактировать шаблон компонента (рис. 2)  

rewrite_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 и в результате вы увидите товары в разделе отсортированы по свойству нужному вам . По аналогии можно добавить сортировку по убыванию и выводимое кол-во товаров на странице. Спасибо за внимание!

Рекомендуем к прочтению



7 комментариев

  • Лекс:

    если всё равно не понятно, почитайте тут. Курс Разработчик Bitrix Framework Рассказывается о Сортировка в компонентах news.list и catalog.section .

  • Алекс:

    Спасибо за заметку. Помогло сделать задачу быстрее :)

  • Expo:

    А как вывести сортировку по выводимому кол-ве товаров на странице?

  • weba:

    куда вставить ?????

    Сортировать по: цене | бренду',
    $APPLICATION->GetCurPageParam("sort=price",array("sort"), false),
    $APPLICATION->GetCurPageParam("sort=Brend",array("sort"), false)
    );

    ?>

    вставил в bitrix:catalog.section

  • Юра:

    Спасибо! Работает :)

  • Codeblog:

    Чтобы не писать сортировку каждый раз вручную, сделал бесплатное решение для вывода панели сортировки по стандартным полям таким как активность, популярность, название, , вес сортировки итд, по свойствам инфоблока, а так же по цене.
    Можете установить через маркетплейс:
    https://marketplace.1c-bitrix.ru/solutions/codeblogpro.sortpanel/?sphrase_id=54141815

    В описании модуля на маркетплейсе есть видео с примером установки модуля и добавлением компонента sort.panel на страницу сайта.

    P.S. решение так же предоставляет возможность сохранять выбранные параметры сортировки в сессии , чтобы выбранная сортировка сохранялась при переходе от раздела к разделу ( но это функция опциональная. Её можно выключить в настройках компонента).

    С уважением.

Оставить комментарий

Этот сайт защищен reCAPTCHA и применяются Политика конфиденциальности и Условия обслуживания применять.

Срок проверки reCAPTCHA истек. Перезагрузите страницу.