@slun

Как запретить кэширование на уровне блоков или как вывести динамическую информацию в Drupal 8?

В частности, есть system-branding-block, в него мне необходимо вывести текущий заголовок странцы и, соответственно, отключить в блоке страницы. Со вторым все просто - переопределить шаблон (хотя может есть какие-то более правильные методы?)
А вот первым как быть? В собственной теме далаю такой хук:

function mytheme_preprocess_block(&$vars) {
    if ($vars['plugin_id'] != 'system_branding_block') return; 
#Если текущий блок не system branding ничего не делаем, иначе берем тайтл от текущей ноды.

    $node = $node = \Drupal::routeMatch()->getParameter('node');
    if (!$node) return;
    $vars['page_title'] = $node->get('title')->getValue()[0]['value'];
}


Но выполняется оно ровно один раз, пока этот блок не будет закэширован с первым (после очистки кэша) татйлом страницы.
Вопрос: как это обойти?
На ум пока приходит избавиться от system-branding блока совсем и все его содержимое включить в шаблон рендеринга html. Но это уже совсем костыль.
  • Вопрос задан
  • 525 просмотров
Решения вопроса 1
afi13
@afi13
Добрый день,
"Site branding" блок предназначен для вывода общей информации: названия сайта, логотипа, слогана и т.д.
Мне кажется вы используете его не по назначению, т.к. для этого есть Page title блок. Но проблему можно решить добавлением в кеш блока контекста 'url' или полным отключением кеша вашего блока.
https://www.drupal.org/docs/8/api/cache-api/cache-...
drupal.ru/node/127211
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы