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. 첫 페이지 제목을 포함하여 페이지 제목을 얻는 방법이 있습니까 ( 제목 재정의 를 사용 하는 경우에도 )?
Florian Brucker

맞습니다. @FlorianBrucker-첫 페이지가 노드가 아니면 노드 변수를 사용할 수 없습니다. 제목은 아마에있을 것입니다 page['#title']. VIews (그러나 아마도)에 의한 오버라이드가 포함되어 있는지 확실하지 않습니다
Clive

@Clive 불행히도, 여기에 page['#title']빈 문자열 page.html.twig이 있습니다.
Florian Brucker

동정, 과거에는 어느 시점에서나 유효했지만 지금은 그렇지 않다고 생각합니다. 이 비슷한 질문 이 도움 될 수도 있습니다
Clive

@Clive, 포인터 주셔서 감사하지만 그게 나에게 도움이되지 않았습니다. 문제에 관한 질문을 게시 했습니다 .
Florian Brucker

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;
  }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.