Views Selective Filters: обзор модуля выборочных фильтров для Drupal 7

Расширенные или раскрытые фильтры (Exposed filters) в Drupal 7 очень удобны для фильтрации данных по категориям в представлениях (Views). Однако стандартный механизм расширенных фильтров показывает все возможные варианты категорий по которым можно фильтровать данные.

Например, если вывести все материалы (допустим, автомобили) определенной категории (допустим, Tesla) в виде таблицы, то включив расширенный фильтр по категориям машин, он будет показывать все возможные категории автомобилей (Acura, BMW, DeLorean, Nissan, Tesla, Toyota и т.д.).

В совокупности в применением нескольких фильтров (допустим, понадобится фильтр по году выпуска) снова будут выведены все возможные варианты (все года, допустим, от начала века). И, соответственно, отфильтровав данные по параметрам "Tesla 2001 года" мы получим совершенно логичную и совершенно... пустую таблицу. Причина очевидна: автомобили Tesla массово не производились до 2015 года.

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

Описанную задачу как раз таки решает модуль Views Selective Filters (назовем это по-русски "Выборочные фильтры представлений"). После стандартной установки среди списка фильтров представлений появится множество дополнительных фильтров отмеченных как "Имя поля (selected)".

Выборочные фильтры могут быть только расширенными и работают только при условии что одноименное поле уже есть в списке полей выборки (т.е. если вы хотите применить выборочный фильтр к году выпуска автомобиля, то год выпуска автомобиля уже должен быть в списке полей представления). Модуль работает по принципу, который можно сформулировать перефразируя Соломона: "чего нет, того нельзя отфильтровать".

Если же вы попытаетесь выборочно отфильтровать данные по полю, которого нет в представлении - получите красную ошибку:

Selective query filter must have corresponding field added to view with Administrative Name set to "имя поля (selective)" and Base Type "имя поля"

С этим связан один не очень приятный недостаток (надеюсь, он будет исправлен в будущем): если представление формируется из чего либо, кроме полей (например, из анонсов) то выборочная фильтрация работать не будет. Слава Богу, для анонса это легко поправимо методом формирования его же (анонса) из отдельных полей, хотя добавляет работы и программисту, и верстальщику.

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

Наглядно оценить работоспособность выборочных фильтров вы можете на примере последних материалов данного сайта, фильтрация осуществляется по типу материалов, дате публикации и тегам материалов. Для начала попробуйте отфильтровать данные по типу "Проект" и посмотрите как изменится содержимое фильтров "Дата" и "Теги" (при этом фильтр "Тип" сохранит свое состояние). Затем отключите фильтрацию по типу (выберите, соответственно, вариант "- Любой -") и отфильтруйте данные по тегу "Views Selective Filters" — теперь фильтры даты и типов сократятся. Так, собственно, обычно и ведут себя автофильтры в табличных процессорах (в том же Excel или LibreOffice Calc).

В итоге модуль Views Selective Filters хорошо влияет на представления и функциональность выборок (особенно при нескольких параметрах фильтрации) и настоятельно рекомендуется к использованию.

Пример выборочных фильтров представления

Тип Дата Теги Заголовок материала
Запись 2017-11-12 HighLoad++, Записи, YouTube, Видео Записи трансляций HighLoad++ 2017
Статья 2017-10-16 Статья, Drupal, Views, Views Selective Filters, Exposed filters, Tesla Views Selective Filters: обзор модуля выборочных фильтров для Drupal 7
Статья 2017-07-02 Статья, Drupal, систематизация, разработка, сайт Как защитить сайт на Drupal 7 и упростить разработку
Запись 2017-06-12 Запись, Видео, YouTube, HighLoad++, Нейронная сеть, Перцептрон Выступление Наталии Ефремовой о применении нейронных сетей
Статья 2017-06-10 Статья, Конвертация, ffmpeg, FAT32, транскодинг, Видео Конвертация видео в быту