Какой самый грамотный путь сортировки одновременно по нескольким параметрам в элементах раздела?
Какой самый грамотный путь сортировки одновременно по нескольким параметрам (например по цене, по популярности, по айди, по новизне) в элементах раздела, чтобы пользователь нажал кнопку "показать" и применились одновременно все типы сортировки которые он выбрал?
решение одновременного показа сортировок решилось с помощью кастомизации компонента. решения кодом найти не смог к стандартному компоненту битрикса найти не смог.
здесь расписана необходимая модификация стандартного компонента archive.hamdeew.ru/page/bitrixcatalogsection-sorti...
По одному параметру это ещё сортировка, несколько одновременно это уже фильтр https://dev.1c-bitrix.ru/api_help/iblock/classes/c...
Делаете форму принимающую данные пользователя и отдаёте данные аяксом в фильтр, например такого плана:
<? $GLOBALS['arrFilter'] = array('!PROPERTY_data_state' => 'busy', "IBLOCK_TYPE" => "house", 'IBLOCK_ID' => $arr_dom);?>
symply_rabbit, это был просто пример. Смотрите документацию, делайте print_r переменной фильтра, смотрите какие в нём данные.
У вас в фильтре должны быть ID товаров, которые передаются в catalog.section.
Для комплексного компонента каталога есть нюансы
Ярослав Александров, там нет ничего по одновременному применению сортировок. и я такого никогда не делал, или то или то делал. фильтром выборку айдишников, выборку по свойству и такое. а чтобы несколько сортировок было применено... немного не представляю даж
по нескольким параметрам (например по цене, по популярности, по айди, по новизне)
У меня вот какой вопрос возник. Вы в вопросе даже ТЗ нормально не сформировали.
1) Цена-2000, Популярный (критерий популярности), ID 1099, новинка
2) Цена-1900, Популярный (критерий популярности), ID 2091, новинка
Какой из этих товаров согласно вашей задачи будет первым в списке, а какой вторым?
Ярослав Александров, да хрен его. я сам пытаюсь понять как должны работать одновременные сортировки. просто когда делаешь отдельные сортировки, тогда нажимаешь по цене: from большей to меньшей - 2000, затем 1900. нажимаешь по популярности, фильтр по цене сбрасывается и показываются популярные товары и пр.
а здесь как понимаю нужно чтобы предыдущая сортировка не сбрасывалась. может быть оно должно работать следующим образом: первый фильтр по цене от большей к меньшей. нажал. цены 2000 , 1900 и тд. потом нажал "по популярности", предыдущие настройки не сбросились а добавились популярные. например во всем каталоге 5 популярных товаров из 50. и тогда каталог разделяется на 2 части и наверху показываются эти 5 товаров и они отсортированы по цене например : 2000, 1500, 1300, 1100, 900. а ниже остальные 40 товаров отсортированы по цене например 1900, 1800, 1700, 1000 и пр.
это единственный вариант как должно выглядеть который приходит мне в голову. наверху я привел пример. по отдельности товары сортировались так (не совместной сортировкой). потом мне сказали что можно оставить такую сортировку "по цене (от max до min наоборот), по новизне (не через id теперь, а можно через галочку, свойство инфоблока, типа админы сайта поставили у 4х товаров галочку"новинка" и товар относится к новинкам), и по наличие (catalog quantity)." и должно работать одновременно.
Таким образом судя по моей обновленной задаче и вашему вопросу, я так полагаю, результат должен бы такой(возьмем 5 товаров как пример):
1) Цена-2000, новинка (галочка), не в наличии
2) Цена-1900, новинка, в наличии
3) Цена-1300, не новинка, не в наличии
4) цена-1800 , не новинка, в наличии
5) цена 1100, новинка , не в наличии
по этой задаче когда все 3 сортировки применены, то это как я понимаю должно выглядеть следующим образом:
по 1му клику применился 1 сортировка по цене и они выстроились : 2000, 1900, 1800, 1300, 1100
кликнута 2я кнопка "по новизне(галочке)". сначала показываются новинки. по примеру 3 товаров впереди отсортированы по цене от большей к меньшей (товары порядковый номер которых 1,2, 5) и остальные 2 отсортировались : 4, 3
кликнута 3я кнопка по наличию. применены все 3 сортировки. сначала показываются новые и в наличии и они отсортированы по цене. это только номер 2. если бы было больше номеров они были бы отсортированы по цене.
ниже наверное все остальные. что не в наличии, но новинки, и что в наличии но не новинки и ни те ни те и разделены по цене тоже... насчет последнего варианта сам не до конца понял как должно выглядеть. снова деление каталога на 2 или деление каталога на 4 части?
ссори за такое долгое описание. сам пытаюсь понять. надеюсь вы поняли о чем речь
Ярослав Александров, а согласно тз просто стояло одновременная все сортировки чтобы работали, то есть цена+новинка+наличие . сам пытался понять как это должно выглядеть
symply_rabbit, такого плана сортировка по нескольким критериям возможна только в собственном компоненте. Я бы это назвал больше группировка товаров по признаку. В битрикс экзамене №2 есть такие вопросы по группировке товаров каталога в билетах.
symply_rabbit, делаете над списком товаров меню с ссылками вида
?sort=price, где через sort передаете параметр сортировки.
Далее вытаскиваете этот параметр и присваиваете по условию нужный параметр в настройки поля компонента
<?if ($_GET["sort"] == "price")
{
$arParams["ELEMENT_SORT_FIELD"] = "catalog_PRICE_2";
Ярослав Александров, это вроде как раздельная сортировка. и по клику на каждую кнопку значение предыдущее удаляется. а мне нужно чтобы не удалялось значение сортировки а добавлялось при клике на каждую их кнопок
symply_rabbit, я думаю вам уже давно должно стать понятно, что то что вы хотите наверняка не существует в готовом виде, в системных компонентах вы такой функционал не реализуете. Начните с проработки детализированного технического задания, проведите техническое обследование на предмет возможности реализации. Вот тут возьмите загототовку компонента https://academy.1c-bitrix.ru/certification/exams.php, поработайте с массивом.
На этом в принципе тема считаю исчерпана.
Как по вашему - можно одновременно показать товары по цене и по популярности? Никак! Либо сначала с низкой ценой, потом при одинаковой цене популярные...)