Фильтр по imagefield во views

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

Аватар пользователя iAndrey iAndrey 25 июня 2012 в 17:17

Всем привет!
Столкнулся с такой задачей, как exposed-фильтр вывода нод во вьюсах по наличию файла файла в поле типа imagefield. Другими словами, нужно чтобы в случае надобности пользователь мог отфильтровать список нод и оставить только те, к которым прикреплены изображения.
Есть какие-либо идеи?

Комментарии

Аватар пользователя iAndrey iAndrey 25 июня 2012 в 17:51

Так попробовал - но ничего не получилось!)
Добавил фильтр - Содержимое:изображение(fid), выбрал NOT NULL, разрешил пользователям менять значение фильтра... И получил просто текстовое поле с возможностью ввода туда fid(как я понимаю). А мне нужно что-то типа чекбокса(ну или просто какой-либо переключатель фильтровки "показать все/показать только с изображением", а чекбокс я либо модулями, либо ручками запилю)

Аватар пользователя rimen rimen 26 июня 2012 в 11:00

Нет решения готового (чтобы чекбокс именно был, либо я в свое время плохо искал) - сделайте свой views filter, это не так сложно, поглядите примеры из других модулей, интегрированных с views

Аватар пользователя sg85 sg85 26 июня 2012 в 17:05

"iAndrey" wrote:
Понимаю, но может есть решение - и зачем тогда изобретать велосипед?

Этот "велосипед" всего в пару строк кода

Аватар пользователя iAndrey iAndrey 28 июня 2012 в 20:21

"sg85" wrote:
Этот "велосипед" всего в пару строк кода

Начал разбираться - и увяз, когда дошел до фильтрации нод по наличию изображения... Не подскажите как это реализовать?

Аватар пользователя sg85 sg85 29 июня 2012 в 15:11

Если в 2х словах, на примере views 2 - подключаете вьювс через hook_views_api() в своем модуле, далее создаете файл ваш_модуль.views.inc, в нем объявляете в hook_misc_views_data() ваш фильтр и там же хендлер для него в hook_views_handlers(), далее создаете дочерний объект(class, тут идет полноценный ООП) для нужного вам хендлера в отдельном файле (имя_хендлера.inc), где, чего, какие родительские классы брать и т.д. можно подглядеть в исходниках или в Advanced Help или docs/docs.php(если он есть в 3й версии), писал от балды, так что скорее всего где-нибудь могут быть не точности, надеюсь кто-нибудь трезвый подправит.

Аватар пользователя rimen rimen 10 ноября 2015 в 11:48

sq85 все верно расписал по сути для создания своих хендлеров.
Но в данном случае надо работать с таблицами филдов, это, думаю, нужно учитывать, кроме того много уже придумано за нас.
Вообщем во вложении мини модуль-пример, который добавляет фильтр "Есть/нет картинка", хендлер стандартный views_handler_filter_boolean_operator. Проверил - у меня работает.
Exposed фильтр получается селектом (Image is present: Yes, No, -Any- (если фильтр не обязательный) ). Хотите чекбокс, тут уж все карты в руки - добавьте свой хендлер, например расширив тот же стандартный boolean_operator, изменив вид.

Аватар пользователя MXM MXM 6 февраля 2013 в 8:09

Раскрою секрет, в D7 не нужны никакие доп. модули - все решается стандартными средствами Views:
1) В "отношениях" добавляем поле с картинкой - у меня фото (Содержимое: Фото:fid)
2) Добавляем "критерий фильтрации" - "Использование файлов: Используемое количество"
3) В его настройках раскрываем фильтр для пользователей -> выбираем "Групповые фильтры" -> устанавливаем "связь" с отношением из п.1 -> ставим галку "Разрешить множественный выбор" -> прописываем метку, оператор: больше или равно, значение = 1 -> удаляем лишние варианты
4) Все сохраняем
5) Благодарим меня, если помог...

Аватар пользователя psyh psyh 26 апреля 2014 в 12:42

MXM Спасибо. Работает.
Но возникла проблема, в выводе записи дублируются по колличеству фотографий в каждой ноде.

Аватар пользователя psyh psyh 1 мая 2014 в 20:52

MXM Еще раз спасибо. Работает, но долго мучался с дубликатами. В шестерке бы на виду было условие Distinct убирающее дубликаты. А в семерке его не ввидно. Я думал его и нет вовсе, искал другие способы убрать дубликаты.
В итоге нашел в "Advanced" пункт "Query settings", в котором и находится заветный Distinct.
А фильтр я сделал чуть по другому, Relationships не использовал вовсе. А добавил в фильтр поле "Image:width", а дальше практически все то же самое.