Làm cách nào để hiển thị tiêu đề nút hiện tại trong page.html.twig HOẶC trong node.html.twig?


14

Nếu tôi muốn hiển thị tiêu đề nút hiện tại trong page.html.twig (theo mặc định, nó dường như chỉ khả dụng trong node.html.twig) Tôi phải tạo một hàm tiền xử lý như vậy:

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

Và sau đó tôi phải ghi đè trang-title.html.twig bằng cách sao chép nó vào thư mục chủ đề hiện tại của tôi và nhận xét mọi thứ.

Điều này dường như không "đúng". Có cách nào tốt hơn?

Câu trả lời:


20

Nút đã có sẵn trong mẫu trang nhờ template_preprocess_page, do đó không cần chức năng tiền xử lý. Bạn có thể xuất tiêu đề với:

{{ node.label }}

Bản thân tiêu đề trang là một khối, vì vậy nếu bạn không cần thêm nữa, chỉ cần xóa nó khỏi khu vực tại / admin / architecture / block. Không cần phải sao chép mẫu vào chủ đề của bạn hoặc thay đổi bản gốc.


Điều này dường như không hoạt động trên trang nhất, nơi nodechỉ là NULL. Có cách nào để có được bất kỳ tiêu đề trang nào, bao gồm tiêu đề trang trước (ngay cả khi sử dụng ghi đè tiêu đề ) không?
Florian Brucker

Điều đó đúng @FlorianBrucker - trừ khi trang đầu là nút, bạn sẽ không có sẵn biến nút. Tiêu đề có lẽ là trong page['#title'], tôi không chắc liệu nó có chứa bất kỳ ghi đè nào được tạo bởi VIews (nhưng có lẽ)
Clive

@Clive Thật không may, page['#title']là một chuỗi trống ở page.html.twigđây.
Florian Brucker

Đáng tiếc, tôi nghĩ rằng điều đó có giá trị tại một số điểm trong quá khứ, rõ ràng không phải bây giờ. Câu hỏi tương tự này có thể giúp ích
Clive

@Clive, cảm ơn vì con trỏ, nhưng điều đó cũng không giúp tôi. Tôi đã đăng một câu hỏi liên quan đến vấn đề này .
Florian Brucker

3

Bạn có thể thêm các mã dưới đây vào đầu node.html.twigthư mục mẫu của chủ đề của bạn:

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

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

0

Mã Drupal 8 để thực hiện những gì mã bạn hiển thị nên làm là mã sau đây.

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;
  }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.