Làm thế nào tôi có thể có được tiêu đề trang?


13

drupal_get_title() đã bị xóa khỏi Drupal 8. Làm cách nào tôi có thể lấy tiêu đề trang trong Drupal 8?

Câu trả lời:


21

Nếu bạn kiểm tra các bản ghi thay đổi, bạn sẽ thấy như sau: drupal_set_title () và drupal_get_title () đã bị xóa .

Bạn sẽ phải đọc thông báo thay đổi cho tất cả các thông tin, nhưng đây là điểm bắt đầu:

drupal_get_title ()

Vì các tiêu đề trên các tuyến đường hiện có thể được đặt theo nhiều cách khác nhau (xem bên trên), drupal_get_title () đã bị xóa. Ở vị trí của nó, bạn nên gọi dịch vụ title_resolver.

Drupal 7

<?php
  $title = drupal_get_title();
?>

Drupal 8

<?php
  $request = \Drupal::request();
  if ($route = $request->attributes->get(\Symfony\Cmf\Component\Routing\RouteObjectInterface::ROUTE_OBJECT)) {
    $title = \Drupal::service('title_resolver')->getTitle($request, $route);
  }
?>

1
Phản hồi được chấp nhận đã hết hạn: xem các phần khác trong chuỗi này cho CurrentRouteMatch.
JP

7

Theo batch_test.module(D8.4), các mục sau sẽ hoạt động tốt:

$request     = \Drupal::request();
$route_match = \Drupal::routeMatch();
$title       = \Drupal::service('title_resolver')->getTitle($request, $route_match->getRouteObject());

Để biết thêm thông tin xem public function TitleResolver::getTitle.


0

Ghi chú

Câu trả lời được chấp nhận cho câu hỏi này đã hết hạn: Xem Tham số yêu cầu, tên tuyến đường và đối tượng tuyến đường nên được truy cập qua RouteMatch .

Bạn nên sử dụng dịch vụ current_route_match để truy xuất tuyến đường hiện tại, sau đó đọc hoặc sửa đổi các tham số của nó. Điều này kết thúc bất kỳ phép thuật Symfony, vv.

Trong mã thủ tục, bạn sẽ sử dụng mã tương tự như sau.

$route = \Drupal::routeMatch()->getCurrentRouteMatch()->getRouteObject();
$title = $route->getDefault('_title');

Trong mã hướng đối tượng, bạn nên sử dụng phép nội xạ phụ thuộc và tiêm dịch vụ.


Phải làm gì nếu không có $route->getDefault('_title');nhưng chỉ có a $route->getDefault('_title_callback');?
leymannx

Ví dụ trên example.com/user/1
leymannx

1
Điều này bỏ qua TitleResolver vì vậy không xử lý tất cả các tình huống. api.drupal.org/api/drupal/ từ
imclean

Sử dụng giải pháp này sẽ có được tiêu đề chưa được dịch.
Saud Alfadhli

-3

Drupal 8

$request = \Drupal::request();
  // Assuming the Request is $request.
  if ($request->attributes->has('_title')) {
    return $request->attributes->get('_title');
  }

Tôi đã không đánh dấu phản hồi này, nhưng có vẻ như ->get('_MAGIC')phương pháp này không may bị phản đối và chủ yếu bị xóa khỏi D8: drupal.org/node/2124749
JP
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.