Jak wyświetlić aktualny tytuł węzła w page.html.twig LUB w node.html.twig?


14

Jeśli chcę wyświetlić bieżący tytuł węzła w page.html.twig (domyślnie wydaje się, że jest dostępny tylko w node.html.twig), muszę utworzyć funkcję wstępnego przetwarzania w następujący sposób:

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

A potem muszę nadpisać page-title.html.twig, kopiując go do mojego bieżącego folderu motywów i komentując wszystko.

To nie wydaje się „właściwe”. Czy jest lepszy sposób?

Odpowiedzi:


21

Węzeł jest już dostępny w szablonie strony, dzięki template_preprocess_pageczemu nie ma potrzeby korzystania z funkcji wstępnego przetwarzania. Możesz wypisać tytuł za pomocą:

{{ node.label }}

Sam tytuł strony to blok, więc jeśli już go nie potrzebujesz, po prostu usuń go z regionu w / admin / structure / block. Nie trzeba kopiować szablonu do motywu ani zmieniać oryginału.


To nie wydaje się działać na pierwszej stronie, gdzie nodejest po prostu NULL. Czy istnieje sposób na uzyskanie dowolnego tytułu strony, w tym tytułu pierwszej strony (nawet jeśli zastosowano zastąpienie tytułu )?
Florian Brucker

Zgadza się @FlorianBrucker - chyba że strona główna jest węzłem, nie byłaby dostępna zmienna węzła. Tytuł prawdopodobnie jest w page['#title']środku, nie jestem pewien, czy zawierałoby to jakiekolwiek zmiany wprowadzone przez VIews (ale prawdopodobnie)
Clive

@Clive Niestety, tutaj page['#title']jest pusty ciąg znaków page.html.twig.
Florian Brucker

Szkoda, myślę, że było to ważne w pewnym momencie w przeszłości, oczywiście nie teraz. To podobne pytanie może pomóc
Clive

@Clive, dzięki za wskaźnik, ale to też mi nie pomogło. Zadałem pytanie dotyczące tego problemu .
Florian Brucker

3

Możesz dodać poniższe kody na górze node.html.twigw folderze szablonów swojego motywu:

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

{% if page %}
  <h2{{ title_attributes }}>
    {{ label }}
  </h2>
{% endif %}

0

Kod Drupal 8 służący do robienia tego, co powinien zrobić kod pokazany poniżej, jest następujący.

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;
  }
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.