Убираем пустые категории из фильтра во views

Весьма распространённый случай, когда в качестве exposed filter используется поле, связанное с таксономией. Так вы получаете набор опций в фильтре для своего представления, которое доступно пользователю.

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

Т.е. опция в фильтре есть, а список будет пустой при её выборе. Это довольно не приятный опыт для пользователя, и нам его стоит избегать.

Решения для пустых категорий

Используется традиционно два пути, чтобы как то решить ситуацию, причем один из них простой, но тупиковый — представление настраивается так, чтобы красиво оформить список в случае, если результаты запроса пусты. Выводится сообщение об отсутствии результата, стильная картинка и ссылки на другие страницы каталога, часто даже без учета контекста запроса.

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

Поэтому рассмотрим другой путь, а именно уберем из фильтра категории, которые не содержат результатов.

Я буду показывать в контексте своей задачи, вам придется подумать, как это можно применить для вашего случая.

Потребуется реализация hook_form_views_exposed_form_alter и работа с базой данных, т.к. другого способа выяснить будет ли запрос пуст, кроме как его выполнить предварительно, не существует.

Детали задачи

Моё представление создавало список сущностей commerce_product_variation в контексте выбранного тега товара. А на форме был фильтр по категории товара. Получалось, что для выбранного тега товара, не все категории были актуальны. Нужно было удалить из фильтра лишние (пустые) категории.

Вероятно структура кода hook будет у вас такой же, только потребуется сконструировать собственный запрос к базе.

Мало букафф? Читайте есчо !

Ошибка в Drupal: once is not a function

Май 8, 2023 г.

В Drupal 9/10 нет jQuery плагина once(), потому при использовании этой функции вы увидите сообщение о том, что once - не является функцией. Плагин удобен, но его не сложно заменить в коде буквально парой вставок. Он работает по следующему алгоритму ...

Читать

Как получить код языка по умолчанию в Drupal

Июль 4, 2025 г.

В Drupal (начиная с версии 8 и выше, включая 10 и 11), чтобы получить код языка по умолчанию сайта (например, en, ru, fr), используйте следующий способ: [crayon-6aae22ea1f462218969911/] Подробности запроса: \Drupal::languageManager() — обращение ...

Читать

Удаление неиспользуемых файлов в Drupal

Октябрь 17, 2024 г.

Особенно полезно, когда вы использовали проект как шаблон для другого сайта и надо почистить данные. Друпал хоть и показывает статистику использования файлов, но удалять файлы не позволяет из реестра /admin/content/files. Напишем небольшой скрипт, ...

Читать

Получить список типов товаров в Drupal Commerce

Июль 23, 2023 г.

В терминологии Drupal, типы товаров это - бандлы (bundle) сущности commerce_product. Получить их список можно вот так: [crayon-6aae22ea1f7a9627821429/] Как результат, в $product_types вы получите массив типов товаров, где ключом является ...

Читать
 

Комментарии к «Убираем пустые категории из фильтра во views»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: