1. Главная
  2. Форумы
  3. Техподдержка Drupal
  4. Решение проблем

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

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

День добрый.
Есть блок "Случайное изображение" на 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
?>

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

Логотип drupal.ru

Содержимое сайта публикуется на условиях CreativeCommons Attribution-ShareAlike 3.0 или более поздней версии. Программные коды в тексте статей — на условиях GNU GPL v2 или более поздней версии.

Документация по совместной работе с репозиторием drupal.ru – https://docs.drupal.ru/code

Drupal – торговая марка Дриса Бёйтарта

12+

AltStyle によって変換されたページ (->オリジナル) /