Como mostro o título do nó atual em page.html.twig OU em node.html.twig?

14

Se eu quiser mostrar o título do nó atual em page.html.twig (por padrão, parece estar disponível apenas em node.html.twig), tenho que criar uma função de pré-processo, da seguinte forma:

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;
  }
}

E então eu tenho que sobrescrever page-title.html.twig, copiando-o na minha pasta de temas atual e comentando tudo.

Isso não parece "certo". Existe uma maneira melhor?

Greg
fonte

Respostas:

20

O nó já está disponível no modelo de página graças a template_preprocess_page, portanto, não há necessidade da função de pré-processo. Você pode imprimir o título com:

{{ node.label }}

O título da página em si é um bloco; portanto, se você não precisar mais, remova-o da região em / admin / structure / block. Não é necessário copiar o modelo para o seu tema ou alterar o original.

Clive
fonte
Isso não parece funcionar na primeira página, onde nodeé justo NULL. Existe uma maneira de obter qualquer título de página, incluindo o título da primeira página (mesmo quando uma substituição de título é usada)?
Florian Brucker
Correto @FlorianBrucker - a menos que a primeira página seja um nó, você não teria uma variável de nó disponível. Provavelmente o título está dentro page['#title'], não tenho certeza se isso conteria alguma substituição feita pelo VIews (mas provavelmente)
Clive
@ Clive Infelizmente, page['#title']há uma string vazia page.html.twigaqui.
Florian Brucker
Pena, acho que isso era válido em algum momento do passado, obviamente não agora. Esta questão semelhante poderia ajudar
Clive
@ Clive, obrigado pelo ponteiro, mas isso também não me ajudou. Publiquei uma pergunta sobre o problema .
Florian Brucker
3

Você pode adicionar os códigos abaixo à parte superior da node.html.twigpasta de modelos do seu tema:

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

{% if page %}
  <h2{{ title_attributes }}>
    {{ label }}
  </h2>
{% endif %}
Mojtaba Reyhani
fonte
0

O código do Drupal 8 para fazer o que o código mostrado deve fazer é o seguinte.

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;
  }
}
kiamlaluno
fonte