Есть блок, вывод которого зависит от параметра cityID. Город выбирается из списка. Этот выбор представляет собой ссылку с параметром, например, "/?cityID=140". Соответственно страница перезагружается с новым параметром, а php-скрипт, который формирует код блока не срабатывает.
Я подозреваю, это потому что Друпал считает, что страница та же самая и не выполняет функцию формирования блока build(), верно?
Если так, то как заставить переформировать блок при смене параметра?
Не отрабатывает функция build() блока при изменении параметра в адресной строке - как исправить?
Главные вкладки
Лучший ответ
1
https://niklan.net/blog/155 почитайте тут. Всё зависит от ваших целей. На крайняк, если вычисления не сильно ресурсоёмкие, можно поставить 'max_age' => 0 и блок вообще не будет кэшироваться.
Комментарии
Блок точно не кэшируется?
Есть подозрение, что кешируется. Это как-то можно отключить, чтобы он всегда прогонял функцию?
https://www.drupal.org/project/cacheexclude
This module provides a simple way to exclude certain pages from being cached
Спасибо!
Я так понимаю, там фильтр на всю страницу можно только установить. А только на блок есть? А то как-то из пушки по воробьям выходит...
Похоже блока кешируется, я бы сделал обновление блока по ajax
По ajax правильней, если информация в блоке не должна индексироваться. Если должна, но это не ключевая информация страницы, тогда все равно ajax, но должно соответствовать этому:
https://yandex.ru/support/webmaster/robot-workings/ajax-indexing.xml
почему ajax - пользователь может захотеть узнать что в соседнем регионе или просто будет играть кнопками - каждый раз перегружать страницу не надо.
Если в блоке хранится ключевая информация - тогда от греха подальше, в целях региональной программы продвижения сайта согласно плану отдела маркетинга на текущий год с обязательным предоставлением отчетов по росту свободной посещаемости сайта, надо добиться исключения из кэша, либо сделать вывод блока через views c выносным фильтром (разрешить пользователю менять значения фильтра + фильтр в отдельном блоке).
Всё это решается без дополнительных модулей приблизительно таким способом:
https://gist.github.com/mikecrittenden/71eab7bb9fcf0666e8eac0d1f88bbae4
А что в массивах предполагается указывать?
Допустим, у меня главная страница с параметром: "mysite.com/?cityID=140"
'#cache' => array(
'contexts' => ['url.path'], // https://www.drupal.org/developing/api/8/cache/contexts
'tags' => ['node:1', 'node:2'] // https://www.drupal.org/developing/api/8/cache/tags
),
https://niklan.net/blog/155 почитайте тут. Всё зависит от ваших целей. На крайняк, если вычисления не сильно ресурсоёмкие, можно поставить 'max_age' => 0 и блок вообще не будет кэшироваться.