Как показать текущий заголовок узла в page.html.twig ИЛИ в node.html.twig?

14

Если я хочу показать заголовок текущего узла в page.html.twig (по умолчанию он доступен только в файле node.html.twig), я должен создать функцию предварительной обработки следующим образом:

function theme_preprocess_page(&$variables, $hook) {
  // Set our page title so we can access it in page.html.twig
  if ($node = \Drupal::routeMatch()->getParameter('node')) {
    $variables['my_node_title'] = $node->title->value;
  }
}

А затем мне нужно перезаписать page-title.html.twig, скопировав его в папку с текущей темой и закомментировав все.

Это не кажется "правильным". Есть ли способ лучше?

Greg
источник

Ответы:

20

Благодаря этому узел уже доступен в шаблоне страницы template_preprocess_page, поэтому нет необходимости в функции предварительной обработки. Вы можете вывести заголовок с помощью:

{{ node.label }}

Сам заголовок страницы является блоком, поэтому, если он вам больше не нужен, просто удалите его из области в / admin / structure / block. Нет необходимости копировать шаблон в вашу тему или изменять оригинал.

Клайв
источник
Похоже, это не работает на первой странице, где nodeпросто NULL. Есть ли способ получить любой заголовок страницы, включая заголовок главной страницы (даже если используется переопределение заголовка )?
Флориан Брукер
Это правильно @FlorianBrucker - если только первая страница не является узлом, у вас не будет доступной переменной узла. Название, вероятно , в page['#title'], я не уверен, что будет содержать какое - либо переопределение сделанного Фототуров (но возможно)
Clive
@Clive К сожалению, page['#title']здесь пустая строка page.html.twig.
Флориан Брукер
Жаль, я думаю, что это было действительно когда-то в прошлом, очевидно, не сейчас. Этот подобный вопрос может помочь
Clive
@Clive, спасибо за указатель, но это мне тоже не помогло. Я отправил вопрос относительно проблемы .
Флориан Брукер
3

Вы можете добавить приведенные ниже коды node.html.twigв папку с шаблонами вашей темы:

{% if not page %}
  <h2{{ title_attributes }}>
    <a href="{{ url }}" rel="bookmark">{{ label }}</a>
  </h2>
{% endif %}

{% if page %}
  <h2{{ title_attributes }}>
    {{ label }}
  </h2>
{% endif %}
Мойтаба Рейхани
источник
0

Код Drupal 8 для того, чтобы делать то, что должен показывать код, следующий.

function theme_preprocess_page(&$variables) {
  $request = \Drupal::request();
  $route_match = \Drupal::routeMatch();
  if ($route_match->getParameter('node')) {
    $page_title = \Drupal::service('title_resolver')->getTitle($request, $route_match->getRouteObject());
    $variables['my_node_title'] = $page_title;
  }
}
киамлалуно
источник