Как я могу получить заголовок страницы?

13

drupal_get_title() был удален из Drupal 8. Как я могу получить заголовок страницы в Drupal 8?

user353253
источник

Ответы:

21

Если вы проверите записи изменений, вы должны найти следующее: drupal_set_title () и drupal_get_title () были удалены .

Вам придется прочитать уведомление об изменении всей информации, но вот отправная точка:

drupal_get_title ()

Поскольку заголовки на маршрутах теперь могут быть установлены различными способами (см. Выше), drupal_get_title () был удален. На его месте стоит вызвать сервис 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);
  }
?>
Chapabu
источник
1
Принятый ответ устарел: см. В другом месте в этой теме CurrentRouteMatch.
JP
7

Согласно batch_test.module(D8.4) следующее должно работать нормально:

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

Для получения дополнительной информации см public function TitleResolver::getTitle.

leymannx
источник
0

Заметка

Принятый ответ на этот вопрос устарел: см. Параметры запроса, имя маршрута и объект маршрута должны быть доступны через RouteMatch .

Вы должны использовать службу current_route_match, чтобы получить текущий маршрут, а затем прочитать или изменить его параметры. Это оборачивает любую магию Symfony и т. Д.

В процедурном коде вы должны использовать код, подобный следующему.

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

В объектно-ориентированном коде вы должны использовать внедрение зависимостей и внедрять сервис.

JP
источник
Что делать, если нет, $route->getDefault('_title');а есть только $route->getDefault('_title_callback');?
leymannx
Например, на example.com/user/1
leymannx
2
Это обходит TitleResolver, поэтому не обрабатывает все ситуации. api.drupal.org/api/drupal/…
imclean
Используя это решение, вы получите непереведенный заголовок.
Сауд Альфадли
-3

Drupal 8

$request = \Drupal::request();
  // Assuming the Request is $request.
  if ($request->attributes->has('_title')) {
    return $request->attributes->get('_title');
  }
Нилам Чаудхари
источник
Я не пометил этот ответ, но похоже, что ->get('_MAGIC')метод, к сожалению, устарел и в основном удален из D8: drupal.org/node/2124749
JP