Вы здесь

Views: "Сделан недопустимый выбор" при использовании раскрытого фильтра с множественным значением

0

Товарищи гуру, подскажите пожалуйста, сталкивались ли вы с ошибкой "Сделан недопустимый выбор" в модуле views при использовании раскрытых фильтров с множественным выбором? Ситуация такая: есть тип материала "Новость", у него есть поле field_category - ссылка на термин таксономии словаря "Категории новостей". Делаю views, выводящий новости, и в отдельном блоке с помощью Better Exposed Filters вывожу чекбоксы категорий. Заметил странное поведение: если я отмечу НЕ ВСЕ категории, то первая страница открывается хорошо, но при переходе с помощью пейджера на другие страницы получаю сообщение "Сделан недопустимый выбор". После долгой отладки и гугления оказалось, что подобная ошибка в том или ином роде проскакивает у многих. В частности, вот этот пост заставил меня проверить, какие параметры передаются при переходе между страницами (AJAX у меня отключен). Выяснилось следующее: почему-то при сабмите формы Exosed Filters отмеченные чекбоксы передаются GET-параметрами вида field_category[xx]=xx,
где xx - ИД соответствующего термина. Не отмеченные чекбоксы не передаются вообще. А вот при переходе между страницами отмеченные чекбоксы передаются так же, а не отмеченные передаются как field_category[xx]=0, то есть сам параметр в GET-запросе присутствует, но его значение равно нулю. Если убрать его совсем, то все прекрасно работает, а вот если передавать 0, то получаю упомянутую выше ошибку. Пробовал вклиниться в запрос с помощью hook_views_query_alter(), однако при его выполнении запрос уже сформирован, и приходится писать много кода, чтобы его модифицировать. Да и, честно признаюсь, я не до конца понимаю его работу :). Плюс к тому, таких проблемных вьюх на сайте много, и у всех разные фильтры. Так же пытался удалить GET-параметры, равные нулю, на этапе обработки запроса с помощью EventSubscriber, но данная попытка тоже потерпела неудачу. В итоге решил проблему на стороне клиента: банально прохожу по элементам пейджера с помощью jQuery, и у каждого модифицирую его атрибут href.
Собственно, теперь "главный вопрос жизни вселенной и всего такого": мое решение - это костыль. В идеале все должно работать сразу и без него, вот только я никак не могу понять, почему оно не работает. Были ли у кого-то подобные проблемы и как вы с ними справлялись?

Версия Drupal: 
8.x
Вопрос задан 12.08.2016 - 12:50

Ответы