如何获得页面标题?


13

drupal_get_title() 已从Drupal 8中删除。如何在Drupal 8中获得页面标题?

Answers:


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


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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.