获取页面标题


8

在某些页面上获得标题时,我得到一个空标题,如Home。我在订户中使用的代码如下。

class HistorySubscriber implements EventSubscriberInterface {
  public static function getSubscribedEvents() {
    $events[KernelEvents::REQUEST][] = array('onResponse', 0);
    return $events;
  }

  public function onResponse($event) {
    $request = \Drupal::request();
    $route_match = \Drupal::routeMatch();
    $title = \Drupal::service('title_resolver')->getTitle($request, $route_match->getRouteObject());
  }
}

有问题吗?我该如何解决?


1
遗憾的是,目前尚无明确的API可以执行此操作。曾经有一些问题来讨论这个问题。该信息可以在hook_preprocess_page ...中获得,也可以在\ Drupal \ Core \ Render \ HtmlRenderer :: prepare()中临时获得,但遗憾的是,该标题不会传递给任何事件。我想我们应该针对Drupal核心来解决这个问题……因为这对于人们来说是一个明确的用例
Daniel Wehner 2014年

@DanielWehner也就是说,让我在drupal.org中创建一个问题
rpayanm 2014年

您能否将链接发布到您在drupal.org上提出的问题?
anavarre'1

@anavarre,这是问题drupal.org/node/2399615,但已关闭,因为它是drupal.org/node/2264043
rpayanm

Answers:


1

以下代码可用于更改页面标题。

// Alter page title.
$request = \Drupal::request();
if ($route = $request->attributes->get(\Symfony\Cmf\Component\Routing\RouteObjectInterface::ROUTE_OBJECT)) {
  $route->setDefault('_title', 'Kontakt');
}

0

尝试这个

<?php
  $request = \Drupal::request();
  $title=t('Home');
  if ($route = $request->attributes->get(\Symfony\Cmf\Component\Routing\RouteObjectInterface::ROUTE_OBJECT) && !drupal_is_front_page()) {
    $title = \Drupal::service('title_resolver')->getTitle($request, $route);
  }

?>

此代码在首页返回null,然后您应该尝试检查drupal_is_front_page是否显示另一个标题


该代码无效,“首页”页面上的$ title为空
rpayanm 2014年

@RolandoPayánMosqueda如果您的问题仅在家里,请尝试检测首页然后进行更改,我将更新我的答案
Yusef 2014年

不仅在“主页”上发生这种情况,在“管理员/内容”上也发生这种情况,而且我敢肯定在其他页面上也会发生这种情况。
rpayanm

@RolandoPayánMosqueda我认为这是一个drupal问题,drupal 8是beta3,不要指望一切都能正常工作,特别是新功能和API :)
Yusef 2014年

0

在函数中使用此代码,您将获得任何页面的标题,例如术语,节点页面...

public function getCurrentPageTitle() {
    $title = 'DEFAULT TITLE';
    $request = \Drupal::request();
    if ($route = $request->attributes->get(\Symfony\Cmf\Component\Routing\RouteObjectInterface::ROUTE_OBJECT)) {
      // For Taxonomy Term
      if (!empty($request->attributes->get('taxonomy_term'))) {
        $title = $request->attributes->get('taxonomy_term')->get('title')->value;
      }
      // For Node
      else {
        $node = \Drupal::routeMatch()->getParameter('node');
        if (!empty($node) && 'CONTENT_TYPE' === $node->bundle()) {
          $title = "CONTENT_TYPE_SPECIFIC_TITLE_SET";
          //$title = \Drupal::service('title_resolver')->getTitle($request, $route);
        }
        else {
          $title = \Drupal::service('title_resolver')->getTitle($request, $route);
        }
      }
    }
    return $title;
}
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.