Получить заголовок страницы


8

Когда я получаю заголовок на некоторых страницах, я получаю пустой заголовок, такой как Дом . Код, который я использую в моем подписчике, следующий.

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 (), которая, к сожалению, не передает заголовок ни одному событию. Я думаю, что мы должны заполнить вопрос против друпального ядра, чтобы решить ситуацию ... так как это очевидный пример использования для людей
Даниэль Венер,

@DanielWehner, то есть, позвольте мне создать проблему в drupal.org
rpayanm

Не могли бы вы опубликовать ссылку на проблему, которую вы подали на drupal.org?
anavarre

@anavarre, это проблема drupal.org/node/2399615 , но была закрыта, потому что она дублируется с drupal.org/node/2264043
rpayanm

Ответы:


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

?>

этот код возвращает нулевое значение на первой странице, затем вы должны попытаться проверить, показывает ли drupal_is_front_page другой заголовок


Этот код не работает, на «Домашней» странице $ title is null
rpayanm

@ RolandoPayánMosqueda, если ваша проблема только дома, попробуйте определить главную страницу, затем измените ее, я обновляю свой ответ
Юсеф

Это происходит не только на «Доме», но и на «админ / контент», и я уверен, что на других страницах больше.
rpayanm

@ RolandoPayánMosqueda Я думаю, что это проблема drupal, drupal 8 - бета3, не ожидайте, что все будет работать правильно, особенно новые функции и API-интерфейсы :)
Юсеф

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;
}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.