Отключить кэширование блока "Случайное изображение" для анонимных пользователей

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

Аватар пользователя Gnome.su Gnome.su 23 августа 2017 в 6:37

День добрый.
Есть блок "Случайное изображение" на Views. При серфинге на сайте под административным аккаунтом изображения в блоке меняются, а вот для не авторизированных пользователей отображаются одни и те же изображения. Ну они конечно же меняются, вот только при переходе на другую страницу. К примеру на главной видим картинку "pic1.jpg", переходим в раздел новости, там уже видим "pic2.jpg" и вновь переходим на главную где снова наблюдаем "pic1.jpg".
При авторизации под администратором такой проблемы не наблюдается, изображения каждый раз меняются, а не привязываются к определённой странице.
Думаю что это связано с кэшированием, вот только почему кэшируются данные только для анонимов?

В настройках: Максимальный возраст кэша страниц <не кэшировать>

Комментарии

Аватар пользователя Gnome.su Gnome.su 24 августа 2017 в 1:21

Я конечно извиняюсь, но не понимаю где использовать cache max-age = 0
В поисках отключения кэширования на зарубежных форумах часто натыкался на упоминание о max-age = 0, но с английским у меня туго.
Объясните пожалуйста)

Аватар пользователя Niklan Niklan 24 августа 2017 в 7:23

https://api.drupal.org/api/drupal/core!modules!block!block.api.php/function/hook_block_build_alter/8.3.x

Пример прямо со страницы на орге:

<?php
function hook_block_build_alter(array &$build, \Drupal\Core\Block\BlockPluginInterface $block) {
  
// Add the 'user' cache context to some blocks.
  
if ($some_condition) {
    
$build['#cache']['contexts'][] = 'user';
  }
}
?>

Вам надо только

<?php
$build
['#cache']['max-age'] = 0
?>
Аватар пользователя Golum Golum 6 февраля 2018 в 15:37

По вашей ссылке перейти не получилось,видимо тему удалили.
Я начинающий в сфере IT и в данный момент совсем недавно начал осваивать Drupal.
Хочу задать возможно глупый для вас вопрос,но важный и интересный для меня.
Где вы берете данные о различных ячейках массива,их обозначениях и настройках?
Просто я зашел на API и вбил hook_block_build_alter ,но к сожалению не нашел там такой информации.
Приводится лишь пример с $build['#cache']['contexts'].

Так же хотел поинтересоваться по поводу данной темы:
У меня тоже возникла проблема с кэшированием блока.
Создан блок при помощи функции build ,и в этом блоке выводятся случайные сообщения(На тему Случайные советы дня).
Я прочитал ваш вариант с решением,но я к сожалению не понял в каком файле это прописывать.
Не могли бы вы мне подсказать ?

Аватар пользователя Golum Golum 6 февраля 2018 в 17:23

Окей ,я разобрался сам куда вставлять )
Создал простой module_name.module и в нем прописал данный хук с вашими настройками.
Но появилась проблема:условие if ($some_condition) не выполнялось.
Так как я понятия не имею что это за условия и что за загадочная переменная $some_condition(на официальном ресурсе информации не нашел) я решил просто проверить сработает ли как надо ваше предложение с $build['#cache']['max-age'] = 0.
Для того чтоб посмотреть сработает я в условии сделал так:if (!$some_condition) и все получилось как надо.
Кэш отключился для нужного мне блока и сообщения теперь выводятся рандомно,но я все равно хотел бы понять что это за переменная такая.

Аватар пользователя Gnome.su Gnome.su 24 августа 2017 в 15:01

Всем огромное спасибо, но я ничего не понимаю в хуках и главное то что мне не понятно куда этот код нужно вставлять.

<?php
$build['#cache']['max-age'] = 0
?>

Не пинайте ногами, пожалуйста)