glem1337
@glem1337

Как реализовать уникальный индекс сортировки товара в разделе?

Доброго времени суток!

Клиенту нужно управлять сортировкой каждого товара во всех разделах сайта. Управление должно быть на уровне раздела. То есть, если значение сортировки для конкретного раздела заполнено, то используем его, иначе используем стандартный индекс сортировки.

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

Вопросы:
  1. Оптимально ли решать это пользовательским полем?
  2. Вопрос вытекает из первого. Был ли у вас опыт подобной задачи и как вы её решали?
  • Вопрос задан
  • 56 просмотров
Пригласить эксперта
Ответы на вопрос 2
alexyarik
@alexyarik
Битрикс разработчик
1) Вы можете получать и обрабатывать ваше пользовательское поле раздела в result_modifier.php
2) С версии 18.6.900 наследники класса \Bitrix\Iblock\Component\ElementList
поддерживают сортировку по последовательности ID элементов.
Вы можете доработать логику в result_modifier.php и передавать $arElements // массив ID в нужном порядке для поля id – по идентификатору в ключ "ELEMENT_SORT_ORDER"
https://dev.1c-bitrix.ru/user_help/components/cont...
Ответ написан
@anton99zel
29а класс средней школы №7
Добавим к стандартным полям сортировки, в нашем случае "кол-во просмотров, т.е. популярность - shows", свои сортировки, созданные на свойствах элемента - PRIORITET - если хотим поднять элемент выше в списке и NOSKLAD - если хотим убрать товары, отсутствующие на складе - ниже. Отображать не будем, но будем учитывать:
$arSort = array("PROPERTY_NOSKLAD"=>"ASC", "PROPERTY_PRIORITET"=>"DESC", "shows"=>"DESC");
if (
    isset($_GET["sort"]) && isset($_GET["method"]) && (
            $_GET["sort"] == "name" ||
            $_GET["sort"] == "catalog_PRICE_1" ||
            $_GET["sort"] == "shows" ||
            $_GET["sort"] == "created")){
$arSort = array($_GET["sort"]=>$_GET["method"]);
  }

В итоге в компонент или используя api, можно передавать массив, описывающий направления и параметры сортировки .
$res = CIBlockElement::GetList($arSort, Array($arrFilter, $arFilter), false, Array("bShowAll"=>false, "nPageSize"=>18, "iNumPage"=>$pn), $arSelect);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы