Не отрабатывает функция build() блока при изменении параметра в адресной строке - как исправить?

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

Аватар пользователя pingvin156 pingvin156 31 мая 2018 в 9:00

Есть блок, вывод которого зависит от параметра cityID. Город выбирается из списка. Этот выбор представляет собой ссылку с параметром, например, "/?cityID=140". Соответственно страница перезагружается с новым параметром, а php-скрипт, который формирует код блока не срабатывает.
Я подозреваю, это потому что Друпал считает, что страница та же самая и не выполняет функцию формирования блока build(), верно?
Если так, то как заставить переформировать блок при смене параметра?

Лучший ответ

Аватар пользователя gun_dose gun_dose 31 мая 2018 в 10:16
1

https://niklan.net/blog/155 почитайте тут. Всё зависит от ваших целей. На крайняк, если вычисления не сильно ресурсоёмкие, можно поставить 'max_age' => 0 и блок вообще не будет кэшироваться.

Комментарии

Аватар пользователя pingvin156 pingvin156 31 мая 2018 в 9:42

Спасибо!
Я так понимаю, там фильтр на всю страницу можно только установить. А только на блок есть? А то как-то из пушки по воробьям выходит...

Аватар пользователя postgres postgres 31 мая 2018 в 9:43

По ajax правильней, если информация в блоке не должна индексироваться. Если должна, но это не ключевая информация страницы, тогда все равно ajax, но должно соответствовать этому:
https://yandex.ru/support/webmaster/robot-workings/ajax-indexing.xml

почему ajax - пользователь может захотеть узнать что в соседнем регионе или просто будет играть кнопками - каждый раз перегружать страницу не надо.

Если в блоке хранится ключевая информация - тогда от греха подальше, в целях региональной программы продвижения сайта согласно плану отдела маркетинга на текущий год с обязательным предоставлением отчетов по росту свободной посещаемости сайта, надо добиться исключения из кэша, либо сделать вывод блока через views c выносным фильтром (разрешить пользователю менять значения фильтра + фильтр в отдельном блоке).

Аватар пользователя pingvin156 pingvin156 31 мая 2018 в 10:02

А что в массивах предполагается указывать?
Допустим, у меня главная страница с параметром: "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
),