@anton99zel
29а класс средней школы №7

Как сделать сортировку элементов?

В битриксе есть сортировка shows - усредненное количество показов (количество показов / продолжительность показа), т.е. по сути популярные товары выводятся выше.
Как ограничить эту популярность по времени, чтобы первыми были товары популярные не за всё время, а за последние 30 дней? А далее выводим товары в любом другом порядке....
Ну и в принципе - как ограничивать сортировку??
К примеру, показать первыми только 10 новинок, далее любая другая сортировка, а в конце другие новинки...
т.е. нужны ограничения по числу или по периоду.
  • Вопрос задан
  • 639 просмотров
Пригласить эксперта
Ответы на вопрос 3
alex-1917
@alex-1917
Если ответ помог, отметь решением
Вот же по твоей ссылке Танюха пишет:
Перед вызовом компонента разместить код:

вот именно тут и формируется массив, именно для сортировки, откуда вообще слово фильтрация вылезло-то???
$sortField = 'ID'; // поле сортировки по умолчанию
$sortOrder = 'ASC'; // направление сортировки по умолчанию
if (
    isset($_GET["sort"]) && isset($_GET["method"]) && (
$_GET["sort"] == "name" || 
             $_GET["sort"] == "catalog_PRICE_3" ||
            $_GET["sort"] == "property_PRODUCT_TYPE" ||
            $_GET["sort"] == "timestamp_x")){
      $sortField = $_GET["sort"];
      $sortOrder = $_GET["method"];
  }


и уже в компоненте применяешь сформированные параметры из массива
"ELEMENT_SORT_FIELD" => $sortField,
        "ELEMENT_SORT_ORDER" => $sortOrder,
Ответ написан
serginhold
@serginhold
никак, если страшно писать sql запросы или создавать новые таблицы

https://bxapi.ru/src/?module_id=iblock&name=CIBloc...
function GetShowedFunction()
{
    return " IfNULL(BE.SHOW_COUNTER/((UNIX_TIMESTAMP(now())-UNIX_TIMESTAMP(BE.SHOW_COUNTER_START)+0.1)/60/60),0) ";
}


битрикс не хранит в b_iblock_element данные, когда он что-то показал, тупо хранит дату первого показа и ее использует

по этому варианты:
1) забить на эту хотелку
2) использовать собственный sql запрос с join на таблицу b_catalog_viewed_product (CatalogViewedProductTable), это если речь идет о товарах в магазине
3) пункт 2. не подходит, т.к. данные не являются товарами, значит делаем свою таблицу с просмотрами, где будут даты просмотров
Ответ написан
Комментировать
alexyarik
@alexyarik
Битрикс разработчик
Берёте заготовку кастомного комплексного компонента в материалах экзамена №2 и в нём пишите свою логику формирования массива списка товаров.
Свой функционал усредненного количества показов за последние 30 дней скорее всего вам придётся писать в своём модуле и значения показов хранить в своих таблицах базы данных.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы