Не соображу куда воткнуть $view->total_rows для последующей передачи в js-лайтбокс

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

Аватар пользователя marassa marassa 4 декабря 2018 в 15:25

На сайте имеется несколько фотогалерей (на разных страницах), все организованы через view, но в разных стилях (от Views Slideshow до Views Photo Grid) в зависимости от контекста. Так как картинок в некоторых галереях может быть много, используется Views Infinite Scroll для поэтапной подгрузки по необходимости. При клике на любую картинку должен открываться лайтбокс (собственно, неважно какой) и в углу показывать правильный общий счетчик картинок независимо от того, сколько их на данный момент подгружено, например 3/1273, несмотря на то, что пока в страницу подгружено всего 32 картинки.
Как получить общий тотал (на PHP) вроде бы понятно, как передать его браузеру - тоже вопросов нет, только никак не соображу куда же впихнуть этот PHP-код. Код по идее должен выполняться один раз после первого исполнения SQL-запроса вьюшки, и, естественно, только для тех вьюшек, которые содержат поле картинки с форматтером лайтбокса (возможно еще и не напрямую, а внутри дисплей-мода сущности, если вьюшка отображает не "поля", а "содержимое").
Если вхукнуть этот код куда-нибудь в модуль Views, то придется рыться в потрохах объекта view, чтобы понять есть ли в этой вьюхе искомое поле. Как вариант, можно конечно просто вручную переписать те конкретные вьюхи, в которых оно точно есть, но рискую получить в перспективе maintenance nightmare на свою голову.
Если вхукиваться в модуль лайтбокса (что казалось бы логичнее), то Field Formatter ведь понятия не имеет о том, из какой вьюхи его вызвали, да и из вьюхи ли вообще. Или есть какой-нибудь хитрый способ из контекста Field Formatter добраться до объекта view (если форматтер вызван из контекста view)?
Спасибо всем, кто дочитал до конца Wink

Комментарии

Аватар пользователя Orion76 Orion76 4 декабря 2018 в 23:19
1

Как все запутано-)

У вьюса есть два поля:
total_rows
get_total_rows

результат total_rows - используется в пейджере для расчета кол-ва страниц, т.е. доп.запросы делать не обязательно, если у вьюса есть пейджер ("родной" или "самодельный").

Тут сервис-контекст вроде напрашивается, который возьмет у вьюса total_rows и отдаст тому, кто попросит..

Но как я понял, некоторые вьюсы выбирают не сами картинки, а сущности, их содержащие?
Проще б конечно было, если вьюсы выбирали картинки а не сущности с картинками, возможно сгруппированные по сущностям-контейнерам.

Аватар пользователя marassa marassa 5 декабря 2018 в 8:21

Да, я уже вхукнулся через hook_views_post_execute и убедился, что total_rows содержит правильный тотал во всех моих конкретных случаях. А раз так, и никакой дополнительной нагрузки на сервер не требуется, то я наверное из этого хука буду сохранять тотал в drupalSettings (в разрезе вью), и брать оттуда уже из js-кода лайтбокса.

Аватар пользователя marassa marassa 5 декабря 2018 в 8:26

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