Вопрос как сделать чтобы фильтрация с выбором нескольких фасетов применялась после нажатия кнопки, а не каждого фильтра по-отдельности.

Главные вкладки

Аватар пользователя Sart_ Sart_ 24 ноября 2017 в 17:42

Добрый день.
Вот столкнулся с проблемой.
Стояла задача вывести фильтры на странице каталога, с зависимостями, показом количества товара рядом с фильтрами. Использовался Facet API, Facet API Bonus,Facetapi Select,Search ranges,Search views. В качестве сервера поиска использовался Database search.
Поставленные задачи были решены в основном.
Оставалось вывести фасеты в блоке и в pop up окне. Была создана вьюшка Fasets block, - для вывода в блоке.
И Colorbox Node с включенным показом регионов и ссылка на страницу каталога.

Но заказчик захотел, чтобы изменения в блоке применялись после выбора нескольких параметров в фильтре, после нажатия кнопки "Поиск". А сейчас после изменения одного значения фильтра, идет переход на страницу каталога.

Вопрос как сделать чтобы фильтрация с выбором нескольких фасетов применялась после нажатия кнопки "Поиск"?
Подскажите есть ли готовые решения (модули)? Если нет, то в каком направлении копать? Или копать здесь вообще нет смысла?

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

Комментарии

Аватар пользователя t-m-p t-m-p 25 ноября 2017 в 23:08

https://www.drupal.org/project/facetapi_multiselect

UPD
Сорри... вы наверно немного о другом. О том, что я решал еще полгода назад Smile Пришлось писать самому модуль в сочетании с этим модулем. Поделиться не смогу, потому как писал его на скорую руку и он оптимизирован под особенности моего магаза. Другого решения не нашел. Перерыл весь инет.

Аватар пользователя gun_dose gun_dose 26 ноября 2017 в 11:13

Надо понимать ещё одно существенное отличие фасетов от раскрытых фильтров вьюс: раскрытые фильтры - это форма, которую можно заполнить и отправить. А фасетные виджеты - это ссылки, по которым можно кликать и переходить. Всякие фасетные слайдеры, чекбоксы, селекты и прочее - это лишь js-украшалки для всё тех же ссылок - т.е. жмём типа на чекбокс,а на самом деле кликаем в невидимую ссылку.

Хорошо это или плохо - это уже кому как. Но на фасетах нельзя выставить фильтры, типа хочу эппл на андроиде и это вполне разумно.

Аватар пользователя t-m-p t-m-p 26 ноября 2017 в 13:19

gun_dose wrote:
Надо понимать ещё одно существенное отличие фасетов от раскрытых фильтров вьюс: раскрытые фильтры - это форма, которую можно заполнить и отправить. А фасетные виджеты - это ссылки, по которым можно кликать и переходить. Всякие фасетные слайдеры, чекбоксы, селекты и прочее - это лишь js-украшалки для всё тех же ссылок - т.е. жмём типа на чекбокс,а на самом деле кликаем в невидимую ссылку.
Хорошо это или плохо - это уже кому как. Но на фасетах нельзя выставить фильтры, типа хочу эппл на андроиде и это вполне разумно.

Можно поспорить ))) Не понимаю - зачем так выгораживать недоделки в проекте? Сколько не общался обычными пользователями сайтов - им действительно удобно выбирать чекбоксами сразу группу фильтров и только потом применять их одной кнопкой. Да и все фасеты , очень часто, необходимо выводить в одном блоке (для применения к примеру в мменю). А гнаться надо за удобством пользователя а не навязывать ему свое видение. А чтоб не появлялись фильтры бренда и ОС в одном блоке - то всего лишь правильно спроектировать UI фронтэнд Wink

Аватар пользователя gun_dose gun_dose 26 ноября 2017 в 19:55

Это не недоделки. Опыт показывает, что чем дольше юзер выставляет галочки в фильтрах, тем больше вероятность получить пустую выборку.

Аватар пользователя bumble bumble 26 ноября 2017 в 19:03

gun_dose wrote:
фасетные виджеты - это ссылки, по которым можно кликать и переходить. Всякие фасетные слайдеры, чекбоксы, селекты и прочее - это лишь js-украшалки

Ну так, тогда решением может быть написание небольшой JS'ины, которая будет привентить переходы по ссылкам фасетов, коллектить все нажатые о отжатые фасеты, и добавлять кнопку ссылку "Применить все фасеты".

Аватар пользователя t-m-p t-m-p 26 ноября 2017 в 19:40

bumble wrote:

gun_dose написал:

фасетные виджеты - это ссылки, по которым можно кликать и переходить. Всякие фасетные слайдеры, чекбоксы, селекты и прочее - это лишь js-украшалки

Ну так, тогда решением может быть написание небольшой JS'ины, которая будет привентить переходы по ссылкам фасетов, коллектить все нажатые о отжатые фасеты, и добавлять кнопку ссылку "Применить все фасеты".


А это тоже не совсем верное утверждение. Smile Некоторые модули (и мой, в том числе) выводят реальную форму с чекбоксами. Через JS не совсем корректно будет. Но форма работает с методом ГЕт и в некотором роде - да, можно сказать что с помощью формы формируется тоот или иной урл (то бишь - ссылка ))))

Аватар пользователя t-m-p t-m-p 26 ноября 2017 в 19:59

gun_dose wrote:

Это не недоделки. Опыт показывает, что чем дольше юзер выставляет галочки в фильтрах, тем больше вероятность получить пустую выборку.


Ну да... на эту тему уже с вами спорили. Помню! Wink У каждого свое имхо Smile

Аватар пользователя gun_dose gun_dose 26 ноября 2017 в 20:02

t-m-p wrote:

А чтоб не появлялись фильтры бренда и ОС в одном блоке - то всего лишь правильно спроектировать UI фронтэнд Wink

Вот это вы сейчас глупость спороли. Дело не в том, что ОС и бренд в одном блоке. А в том, что фильтры в форме не кореллируют друг с другом и у юзера появляется возможность накликать айфон на андроиде, айфон за сто рублей, телефон на иос с кнопочной клавиатурой и прочие несуществующие в природе сочетания. Преимущество фасетов как раз в том, что при их использовании накликать сочетание фильтров с нулевой выборкой невозможно.

Аватар пользователя t-m-p t-m-p 26 ноября 2017 в 20:20

gun_dose wrote:

t-m-p написал:

А чтоб не появлялись фильтры бренда и ОС в одном блоке - то всего лишь правильно спроектировать UI фронтэнд Wink

Вот это вы сейчас глупость спороли. Дело не в том, что ОС и бренд в одном блоке. А в том, что фильтры в форме не кореллируют друг с другом и у юзера появляется возможность накликать айфон на андроиде, айфон за сто рублей, телефон на иос с кнопочной клавиатурой и прочие несуществующие в природе сочетания. Преимущество фасетов как раз в том, что при их использовании накликать сочетание фильтров с нулевой выборкой невозможно.


Smile Это вы с чего взяли??? Мне показать пример с моего сайта где видно что прекрасно "кореллируют"? Smile

Аватар пользователя t-m-p t-m-p 26 ноября 2017 в 21:03

gun_dose wrote:

Если пример на друпале, то конечно показать))


ОК! Только мой сайт пока еще на локалхосте. Поэтому скриншотами сейчас постараюсь все сделать. А для понимания формирования Формы в модуле можете посмотреть код модуля https://www.drupal.org/project/facetapi_multiselect . кажется я брал его за пример. Скриншоты выложу чуть позже... У меня тут дома экстренное ЧП возникло. Розетка горит, не пойму где замыкание или перегруз! ))) Ща исправлю - потом выложу скрины. Smile

Аватар пользователя t-m-p t-m-p 26 ноября 2017 в 21:52

gun_dose wrote:

Если пример на друпале, то конечно показать))


Вот смотрите:
1. Ни один из фильтров не выбран.
3 брэнда . В роял канине 2 позиции.
1111

Дополнительные фильтры в отдельном блоке. Отдельная форма. 2 фасета. Везде по 2 позиции

1111

выбираем в дополнительном фильтре возраст "Взрослые"

1111

Найдено 2 товара

1111

В списке брэндов у нас теперь только 2 брэнда которые содержат возраст "взрослые"

1111

Выбираем теперь еще брэнд Роял Канин

1111

Найден один товар с такими характеристиками

1111

И в списке доступных атрибутов к Роял Канину у нас уже по одному товару на атрибут

1111

Аватар пользователя t-m-p t-m-p 26 ноября 2017 в 21:48

Блин.... 3-тя картинка не моя. Не пойму, как то на сайте тупо организована загрузка картинок. Загрузил пачкой. Но при вставке картинки - почему то сообщение потерялось как и список всех загруженных файлов. Поэтому просто копировал первую картинку и изменял название. Наверно на сервере уже был файл с подобным названием и подставился тот (чужой файл.) Ща попробую поменять )))

Аватар пользователя t-m-p t-m-p 26 ноября 2017 в 21:57

gun_dose wrote:

Это всё кастомный код?

Брэнды выводяться модулем который я выше давал. А блок с дополнительными фильтрами - мой модуль (2 недели над ним потел! )))). Но за основу строения формы брал тот модуль который выше давал Smile

Аватар пользователя Sart_ Sart_ 28 ноября 2017 в 5:54

Спасибо всем отписавшимся, действительно интересные моменты обсуждаются. Но у меня чуть более прозаичный вопрос: Заказчик теперь хочет совместить BEF по трем позициям на каждой странице и кнопку отправить, с фасетами на странице каталога. Но exposed filters и фасетные формируют разные url. Пример: http://mysite.loc//ru/catalog?f%5B0%5D=field_products_shoe_type%3A5039&f... - фасетные.
И http://mysite.loc/ru/catalog?field_products_shoe_type_tid=5039&field_man... - exposed. Понятно что в принципе конкретные урлы можно преобразовать и получить на странице с фасетами, то что выбрано в обычных фильтрах. Но как? День потратил, но подходящего модуля, преобразовующего ссылки не нашел. Через .htaccess теоретически можно попробовать, но непонятно что на практике. Подскажите кто из своего опыта, реально это сделать? А то http://www.visiospark.com/mod-rewrite-rule-generator/ не справляется, и вот думаю садиться ли писать самому. Тут, если не универсальное регулярное выражение, то хотя бы для 12 конкретных адресов по отдельности. Или может кто подскажет как еще можно эти значения передать на фасетные фильтры, без написания большого количества кода.

Аватар пользователя Andruxa Andruxa 28 ноября 2017 в 11:52

Знаете, если в процессе разработки, когда функционал реализован, а заказчик вдруг начинает "хотеть" - тут надо не функционал править, а заказчика.

Аватар пользователя Sart_ Sart_ 28 ноября 2017 в 6:13

t-m-p wrote:

Сорри... вы наверно немного о другом. О том, что я решал еще полгода назад Smile Пришлось писать самому модуль в сочетании с этим модулем. Поделиться не смогу, потому как писал его на скорую руку и он оптимизирован под особенности моего магаза. Другого решения не нашел. Перерыл весь инет.

Конечно хотелось бы взглянуть, хоть понятней бы стало куда копать. Но понятно труд стоит денег, да и я этот магазин не совсем бесплатно делаю). А за ссылку на модуль Спасибо, на свежую голову уже буду разбираться.

Аватар пользователя adano adano 28 ноября 2017 в 8:49

Sart_ wrote:

Понятно что в принципе конкретные урлы можно преобразовать и получить на странице с фасетами, то что выбрано в обычных фильтрах. Но как?

https://api.drupal.org/api/drupal/modules%21system%21system.api.php/func...
https://api.drupal.org/api/drupal/modules%21system%21system.api.php/func...