Como posso obter o título da página?

13

drupal_get_title() foi removido do Drupal 8. Como posso obter o título da página no Drupal 8?

user353253
fonte

Respostas:

21

Se você verificar os registros de alterações, deverá encontrar o seguinte: drupal_set_title () e drupal_get_title () foram removidos .

Você precisará ler o aviso de alteração para obter todas as informações, mas aqui está um ponto de partida:

drupal_get_title ()

Como os títulos nas rotas agora podem ser definidos de várias maneiras (veja acima), drupal_get_title () foi removido. Em seu lugar, você deve chamar o serviço 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
fonte
1
A resposta aceita está desatualizada: consulte em outro lugar neste segmento para CurrentRouteMatch.
JP
7

Conforme batch_test.module(D8.4), o seguinte deve funcionar perfeitamente:

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

Para mais informações, consulte public function TitleResolver::getTitle.

leymannx
fonte
0

Nota

A resposta aceita para esta pergunta está desatualizada: Consulte Parâmetros de solicitação, nome da rota e objeto da rota devem ser acessados ​​via RouteMatch .

Você deve usar o serviço current_route_match para recuperar a rota atual e, em seguida, ler ou modificar seus parâmetros. Isso envolve qualquer mágica do Symfony etc.

No código processual, você usaria código semelhante ao seguinte.

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

No código orientado a objetos, você deve usar injeção de dependência e injetar o serviço.

JP
fonte
O que fazer se não houver, $route->getDefault('_title');mas apenas um $route->getDefault('_title_callback');?
Leymannx
Por exemplo, em example.com/user/1
leymannx 14/11
2
Isso ignora o TitleResolver e não lida com todas as situações. api.drupal.org/api/drupal/…
imclean
O uso desta solução obterá o título não traduzido.
Saud Alfadhli 13/10/19
-3

Drupal 8

$request = \Drupal::request();
  // Assuming the Request is $request.
  if ($request->attributes->has('_title')) {
    return $request->attributes->get('_title');
  }
Neelam Chaudhary
fonte
Não anotei essa resposta, mas parece que o ->get('_MAGIC')método infelizmente foi preterido e foi removido principalmente do D8: drupal.org/node/2124749
JP