hook_views_query_alter

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

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

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

Лучший ответ

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

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

Комментарии

Аватар пользователя gun_dose
gun_dose 4 месяца назад

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

Аватар пользователя sas@drupal.org
sas@drupal.org 4 месяца назад

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

Аватар пользователя noobishe
noobishe 4 месяца назад

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

Аватар пользователя gun_dose
gun_dose 4 месяца назад

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

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

Аватар пользователя noobishe
noobishe 4 месяца назад

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

Аватар пользователя gun_dose
gun_dose 4 месяца назад

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

Аватар пользователя noobishe
noobishe 4 месяца назад

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

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

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

Аватар пользователя noobishe
noobishe 4 месяца назад

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