Comment puis-je obtenir le titre de la page?

13

drupal_get_title() a été supprimé de Drupal 8. Comment puis-je obtenir le titre de la page dans Drupal 8?

user353253
la source

Réponses:

21

Si vous vérifiez les enregistrements de modification, vous devriez trouver les éléments suivants: drupal_set_title () et drupal_get_title () ont été supprimés .

Vous devrez lire l'avis de modification pour toutes les informations, mais voici un point de départ:

drupal_get_title ()

Comme les titres sur les routes peuvent désormais être définis de différentes manières (voir ci-dessus), drupal_get_title () a été supprimé. À sa place, vous devez appeler le service 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
la source
1
La réponse acceptée est obsolète: voir ailleurs dans ce fil pour CurrentRouteMatch.
JP
7

Selon batch_test.module(D8.4), les éléments suivants devraient fonctionner correctement:

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

Pour plus d'informations, voir public function TitleResolver::getTitle.

leymannx
la source
0

Remarque

La réponse acceptée pour cette question est obsolète: voir Paramètres de la demande, nom de l'itinéraire et objet de l'itinéraire doivent être accessibles via RouteMatch .

Vous devez utiliser le service current_route_match pour récupérer l'itinéraire actuel, puis lire ou modifier ses paramètres. Cela enveloppe toute magie Symfony etc.

Dans le code procédural, vous utiliseriez un code similaire au suivant.

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

Dans le code orienté objet, vous devez utiliser l' injection de dépendances et injecter le service.

JP
la source
Que faire s'il n'y en a pas $route->getDefault('_title');mais seulement un $route->getDefault('_title_callback');?
leymannx
Par exemple sur example.com/user/1
leymannx
2
Cela contourne le TitleResolver et ne gère donc pas toutes les situations. api.drupal.org/api/drupal/…
imclean
L'utilisation de cette solution obtiendra le titre non traduit.
Saud Alfadhli
-3

Drupal 8

$request = \Drupal::request();
  // Assuming the Request is $request.
  if ($request->attributes->has('_title')) {
    return $request->attributes->get('_title');
  }
Neelam Chaudhary
la source
Je n'ai pas noté cette réponse, mais il semble que la ->get('_MAGIC')méthode soit malheureusement obsolète et principalement supprimée de D8: drupal.org/node/2124749
JP