ページのタイトルを取得


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()で利用できますが、残念ながらタイトルはどのイベントにも渡されません。これは人々の明確なユースケースであるため、ドループルコアに対する問題を解決する必要があると思います
Daniel Wehner

@DanielWehnerつまり、drupal.orgで問題を作成させてください
rpayanm 14

drupal.orgに提出した問題へのリンクを投稿していただけませんか?
anavarre 2015年

@anavarreこれは問題drupal.org/node/2399615ですが、drupal.org
node

回答:


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がnullです
rpayanm

@RolandoPayánMosqueda問題が自宅でのみ発生する場合は、フロントページを検出してから変更してください。回答を更新します
Yusef

これは「ホーム」だけでなく、「admin / content」でも発生し、他のページでも確実に表示されます。
rpayanm 2014

@RolandoPayánMosquedaそれはdrupalの問題だと思います。drupal8はbeta3です。すべてが正しく機能することを期待しないでください。特に新機能とAPI :)
Yusef

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