Добрый день.
Вот столкнулся с проблемой.
Стояла задача вывести фильтры на странице каталога, с зависимостями, показом количества товара рядом с фильтрами. Использовался Facet API, Facet API Bonus,Facetapi Select,Search ranges,Search views. В качестве сервера поиска использовался Database search.
Поставленные задачи были решены в основном.
Оставалось вывести фасеты в блоке и в pop up окне. Была создана вьюшка Fasets block, - для вывода в блоке.
И Colorbox Node с включенным показом регионов и ссылка на страницу каталога.
Но заказчик захотел, чтобы изменения в блоке применялись после выбора нескольких параметров в фильтре, после нажатия кнопки "Поиск". А сейчас после изменения одного значения фильтра, идет переход на страницу каталога.
Вопрос как сделать чтобы фильтрация с выбором нескольких фасетов применялась после нажатия кнопки "Поиск"?
Подскажите есть ли готовые решения (модули)? Если нет, то в каком направлении копать? Или копать здесь вообще нет смысла?
Буду очень благодарен за советы, или подсказки.
Комментарии
никак
фасеты это зависимые между собой блоки.
если нужна кнопка отправить. используйте exposed filters
Спасибо, догадывался, что примерно так и обстоят дела.
И нет необходимости писать всё сообщение в заголовок! Оставьте, там только смысл.
https://www.drupal.org/project/facetapi_multiselect
UPD
Сорри... вы наверно немного о другом. О том, что я решал еще полгода назад Пришлось писать самому модуль в сочетании с этим модулем. Поделиться не смогу, потому как писал его на скорую руку и он оптимизирован под особенности моего магаза. Другого решения не нашел. Перерыл весь инет.
Надо понимать ещё одно существенное отличие фасетов от раскрытых фильтров вьюс: раскрытые фильтры - это форма, которую можно заполнить и отправить. А фасетные виджеты - это ссылки, по которым можно кликать и переходить. Всякие фасетные слайдеры, чекбоксы, селекты и прочее - это лишь js-украшалки для всё тех же ссылок - т.е. жмём типа на чекбокс,а на самом деле кликаем в невидимую ссылку.
Хорошо это или плохо - это уже кому как. Но на фасетах нельзя выставить фильтры, типа хочу эппл на андроиде и это вполне разумно.
Можно поспорить ))) Не понимаю - зачем так выгораживать недоделки в проекте? Сколько не общался обычными пользователями сайтов - им действительно удобно выбирать чекбоксами сразу группу фильтров и только потом применять их одной кнопкой. Да и все фасеты , очень часто, необходимо выводить в одном блоке (для применения к примеру в мменю). А гнаться надо за удобством пользователя а не навязывать ему свое видение. А чтоб не появлялись фильтры бренда и ОС в одном блоке - то всего лишь правильно спроектировать UI фронтэнд
Это не недоделки. Опыт показывает, что чем дольше юзер выставляет галочки в фильтрах, тем больше вероятность получить пустую выборку.
Ну так, тогда решением может быть написание небольшой JS'ины, которая будет привентить переходы по ссылкам фасетов, коллектить все нажатые о отжатые фасеты, и добавлять
кнопкуссылку "Применить все фасеты".Эта "небольшая джиэсина" должна ещё по каждому клику ходить в БД и выпиливать нерелевантные фильтры.
Ajax facets - убрать перезагрузку выдачи, оставить только перезагрузку фасетов.
А это тоже не совсем верное утверждение. Некоторые модули (и мой, в том числе) выводят реальную форму с чекбоксами. Через JS не совсем корректно будет. Но форма работает с методом ГЕт и в некотором роде - да, можно сказать что с помощью формы формируется тоот или иной урл (то бишь - ссылка ))))
Ну да... на эту тему уже с вами спорили. Помню! У каждого свое имхо
Вот это вы сейчас глупость спороли. Дело не в том, что ОС и бренд в одном блоке. А в том, что фильтры в форме не кореллируют друг с другом и у юзера появляется возможность накликать айфон на андроиде, айфон за сто рублей, телефон на иос с кнопочной клавиатурой и прочие несуществующие в природе сочетания. Преимущество фасетов как раз в том, что при их использовании накликать сочетание фильтров с нулевой выборкой невозможно.
Это вы с чего взяли??? Мне показать пример с моего сайта где видно что прекрасно "кореллируют"?
Если пример на друпале, то конечно показать))
ОК! Только мой сайт пока еще на локалхосте. Поэтому скриншотами сейчас постараюсь все сделать. А для понимания формирования Формы в модуле можете посмотреть код модуля https://www.drupal.org/project/facetapi_multiselect . кажется я брал его за пример. Скриншоты выложу чуть позже... У меня тут дома экстренное ЧП возникло. Розетка горит, не пойму где замыкание или перегруз! ))) Ща исправлю - потом выложу скрины.
Вот смотрите:
1. Ни один из фильтров не выбран.
3 брэнда . В роял канине 2 позиции.
Дополнительные фильтры в отдельном блоке. Отдельная форма. 2 фасета. Везде по 2 позиции
выбираем в дополнительном фильтре возраст "Взрослые"
Найдено 2 товара
В списке брэндов у нас теперь только 2 брэнда которые содержат возраст "взрослые"
Выбираем теперь еще брэнд Роял Канин
Найден один товар с такими характеристиками
И в списке доступных атрибутов к Роял Канину у нас уже по одному товару на атрибут
Блин.... 3-тя картинка не моя. Не пойму, как то на сайте тупо организована загрузка картинок. Загрузил пачкой. Но при вставке картинки - почему то сообщение потерялось как и список всех загруженных файлов. Поэтому просто копировал первую картинку и изменял название. Наверно на сервере уже был файл с подобным названием и подставился тот (чужой файл.) Ща попробую поменять )))
Это всё кастомный код?
Брэнды выводяться модулем который я выше давал. А блок с дополнительными фильтрами - мой модуль (2 недели над ним потел! )))). Но за основу строения формы брал тот модуль который выше давал
Интересненько)
Спасибо всем отписавшимся, действительно интересные моменты обсуждаются. Но у меня чуть более прозаичный вопрос: Заказчик теперь хочет совместить 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 конкретных адресов по отдельности. Или может кто подскажет как еще можно эти значения передать на фасетные фильтры, без написания большого количества кода.
Знаете, если в процессе разработки, когда функционал реализован, а заказчик вдруг начинает "хотеть" - тут надо не функционал править, а заказчика.
Конечно хотелось бы взглянуть, хоть понятней бы стало куда копать. Но понятно труд стоит денег, да и я этот магазин не совсем бесплатно делаю). А за ссылку на модуль Спасибо, на свежую голову уже буду разбираться.
https://api.drupal.org/api/drupal/modules%21system%21system.api.php/func...
https://api.drupal.org/api/drupal/modules%21system%21system.api.php/func...
Да, слегка не то...а судя по тому, что Вы потратили две недели на написание, это сейчас не для меня вариант. Хотя на будущее может пригодиться.