День добрый.
Есть блок "Случайное изображение" на Views. При серфинге на сайте под административным аккаунтом изображения в блоке меняются, а вот для не авторизированных пользователей отображаются одни и те же изображения. Ну они конечно же меняются, вот только при переходе на другую страницу. К примеру на главной видим картинку "pic1.jpg", переходим в раздел новости, там уже видим "pic2.jpg" и вновь переходим на главную где снова наблюдаем "pic1.jpg".
При авторизации под администратором такой проблемы не наблюдается, изображения каждый раз меняются, а не привязываются к определённой странице.
Думаю что это связано с кэшированием, вот только почему кэшируются данные только для анонимов?
В настройках: Максимальный возраст кэша страниц <не кэшировать>
Комментарии
Кеширование в 8-ке трехуровневое https://www.drupal.org/docs/8/api/cache-api надо настройки потрогать.
Альтерите блок и добавляете нужный cache max-age = 0
Я конечно извиняюсь, но не понимаю где использовать cache max-age = 0
В поисках отключения кэширования на зарубежных форумах часто натыкался на упоминание о max-age = 0, но с английским у меня туго.
Объясните пожалуйста)
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
?>
По вашей ссылке перейти не получилось,видимо тему удалили.
Я начинающий в сфере IT и в данный момент совсем недавно начал осваивать Drupal.
Хочу задать возможно глупый для вас вопрос,но важный и интересный для меня.
Где вы берете данные о различных ячейках массива,их обозначениях и настройках?
Просто я зашел на API и вбил hook_block_build_alter ,но к сожалению не нашел там такой информации.
Приводится лишь пример с $build['#cache']['contexts'].
Так же хотел поинтересоваться по поводу данной темы:
У меня тоже возникла проблема с кэшированием блока.
Создан блок при помощи функции build ,и в этом блоке выводятся случайные сообщения(На тему Случайные советы дня).
Я прочитал ваш вариант с решением,но я к сожалению не понял в каком файле это прописывать.
Не могли бы вы мне подсказать ?
Окей ,я разобрался сам куда вставлять )
Создал простой module_name.module и в нем прописал данный хук с вашими настройками.
Но появилась проблема:условие if ($some_condition) не выполнялось.
Так как я понятия не имею что это за условия и что за загадочная переменная $some_condition(на официальном ресурсе информации не нашел) я решил просто проверить сработает ли как надо ваше предложение с $build['#cache']['max-age'] = 0.
Для того чтоб посмотреть сработает я в условии сделал так:if (!$some_condition) и все получилось как надо.
Кэш отключился для нужного мне блока и сообщения теперь выводятся рандомно,но я все равно хотел бы понять что это за переменная такая.
Что такое "Альтерите блок"?
Использовать хук alter для блока. И в хуке прописываете max-age
Всем огромное спасибо, но я ничего не понимаю в хуках и главное то что мне не понятно куда этот код нужно вставлять.
$build['#cache']['max-age'] = 0
?>
Не пинайте ногами, пожалуйста)
Вот сюда
https://api.drupal.org/api/drupal/core%21modules%21block%21block.api.php...
https://www.drupal.org/project/cache_control_override