Як відобразити поточну назву вузла у 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, скопіювавши її в мою поточну папку теми та прокоментувавши все.

Це не здається "правильним". Чи є кращий спосіб?

Відповіді:


21

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

{{ node.label }}

Сама назва сторінки є блоком, тому якщо вона вам більше не потрібна, просто видаліть її з регіону за адресою / admin / structure / block. Не потрібно копіювати шаблон на свою тему чи змінювати оригінал.


Здається, це не працює на першій сторінці, де nodeце просто NULL. Чи є спосіб отримати будь-яку назву сторінки, включаючи назву титульної сторінки (навіть коли використовується заміна заголовка )?
Флоріан Брюкер

Це правильно @FlorianBrucker - якщо б титульна сторінка не була вузлом, у вас не було б доступної змінної вузла. Заголовок, мабуть, є page['#title'], я не впевнений, чи міститиме це переоцінка VIews (але, мабуть)
Клайв

@Clive На жаль, page['#title']тут порожній рядок page.html.twig.
Флоріан Брюкер

Шкода, я думаю, що це було дійсно в якийсь момент минулого, очевидно, не зараз. Подібне запитання може допомогти
Клайв

@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;
  }
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.