Как сделать комбинированный фильтр в Views?

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

Аватар пользователя strelkovandreyvalerievich strelkovandreyv... 8 ноября 2019 в 14:20

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

ipage idevice igroup ifield ivalue
Суммарная информация   Отображение Видеоадаптер Nvidia Geforce 680
Суммарная информация   Отображение Видеоадаптер ATI Radeon 1000
Суммарная информация   Хранение данных Дисковый накопитель WD Blue x100
Суммарная информация   Мультимедиа Монитор Dell UltraSharp 2340
Установленные программы 7-Zip 19.00   Версия 19.00.00.0
Установленные программы 7-Zip 19.00   Издатель Igor Pavlov
Установленные программы Inkscape   Версия 8.95

 

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


Как можно заметить таблица это выгрузка по железу и софту компьютера, нужно дать возможность пользователям искать по видеокарте например, по процессору, по софту либо ещё как то

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

1. ipage = Суммарная информация
2. igroup = Отображение
3. ifield = Видеоадаптер
4. ivalue = РАСКРЫТЫЙ ФИЛЬТР ПО ТЕКСТУ (Contains)

По программному обеспечению

1. ipage = Установленные программы
2. idevice = РАСКРЫТЫЙ ФИЛЬТР ПО ТЕКСТУ (Contains)


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


Если идти путём группы фильтров, на языке вьюхи

(ipage=Суммарная информация AND igroup=Отображение AND ifield=Видеоадаптер AND ivalue = ...)
OR
(ipage = Установленные программы AND ivalue = ...)


То вроде всё логично, и введя во второй фильтр Inkscape, он покажет эту строку в результат, но он в данном случае и покажет остальные строки где видеоадаптер есть, ведь я ничего не ввёл в раскрытый фильтр первый, но при этом условие
1. ipage = Суммарная информация
2. igroup = Отображение
3. ifield = Видеоадаптер
выполняется

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

(ipage = Установленные программы AND ivalue = ...)