hook_views_query_alter

Аватар пользователя noobishe

Здрасти.
В D8 судя по комментам hook_views_query_alter нужно сувать в _____.views_execution.inc, но при включенном кеше эта штука срабатывает однократно, даже если выключить кеш самой въюшки.
Что нужно сделать чтоб это работало всегда?

Модули и темы:
Тип материала:
Версия Drupal:
0 Thanks

Лучший ответ

Аватар пользователя gun_dose
gun_dose 6 дней назад
1

Обычно отключения кэша вьюса достаточно. С другой стороны, если у вас условия могут меняться, то разумнее будет использовать раскрытые фильтры. Просто не выводить их, а выставлять программно в hook_views_pre_view например. В таком случае, при изменении фильтров кэш не будет использоваться.

Комментарии

Аватар пользователя gun_dose
gun_dose 1 неделя назад

А почему в module не всунули?

Аватар пользователя sas@drupal.org
sas@drupal.org 1 неделя назад

Поместить в myModule.module

Аватар пользователя noobishe
noobishe 1 неделя назад

hook_views_query_alter - тут написано что не в модуль писать нужно.
А если все же написать, то срабатывает только после очистки кеша, а если в my_module.views_execution.inc при отключенном кешированиии(которое в производительности) срабатывает как нужно.
по всей видимости я не в ту сторону копаю, и кешируется у меня тема, а не вивес..

Аватар пользователя gun_dose
gun_dose 1 неделя назад

Зря вы читали эти комменты. Вот я не читал, всунул хук в модуль и всё работает. Причём неоднократно. При объявлении нового хука всегда надо сбрасывать кэш. Далее хук будет отрабатывать по необходимости. Естественно, если вьюс закэширован, то данный хук не вызовется, т.к. запрос не выполняется. Это нормальное поведение, т.к. во время вызова хука запрос был изменён, и закэширован был результат изменённого запроса.

Если же вам так нужно, чтобы хук срабатывал при каждом вызове вьюса, то мне кажется, что у вас изначально неверная постановка задачи. Что вам вообще нужно сделать? Почему решили использовать этот хук?

Аватар пользователя noobishe
noobishe 6 дней назад

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

Аватар пользователя gun_dose
gun_dose 6 дней назад

Ну так а что вас не устраивает? Сработал хук один раз после сброса кэша, закэшировался изменённый результат и всё, больше смысла нет выполнять запрос, пока данные не изменятся.

Аватар пользователя noobishe
noobishe 6 дней назад

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

Аватар пользователя gun_dose
gun_dose 6 дней назад
1

Обычно отключения кэша вьюса достаточно. С другой стороны, если у вас условия могут меняться, то разумнее будет использовать раскрытые фильтры. Просто не выводить их, а выставлять программно в hook_views_pre_view например. В таком случае, при изменении фильтров кэш не будет использоваться.

Аватар пользователя noobishe
noobishe 6 дней назад

Спасибо! Сработало!