ページタイトルを取得するにはどうすればよいですか?


13

drupal_get_title() Drupal 8から削除されました。Drupal8でページタイトルを取得するにはどうすればよいですか?

回答:


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

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


0

注意

この質問の受け入れられた応答は古くなっています。ルートパラメータ、ルート名、ルートオブジェクトにRouteMatchを介してアクセスする必要があるをご覧ください

あなたは使うべきcurrent_route_match現在のルートを取得するためにサービスをして、そのパラメータを読み取りまたは変更します。これはsymfonyなどの魔法をラップします。

手続き型コードでは、次のようなコードを使用します。

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

オブジェクト指向のコードでは、依存性注入を使用してサービスを注入する必要があります。


何があれば何をしないように$route->getDefault('_title');だけ$route->getDefault('_title_callback');
leymannx 2017年

たとえば、example.com
user / 1の

2
これはTitleResolverをバイパスするため、すべての状況を処理するわけではありません。api.drupal.org/api/drupal/...
imclean

このソリューションを使用すると、未翻訳のタイトルが取得されます。
Saud Alfadhli

-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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.