Отримати заголовок сторінки


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, щоб це зробити. Для обговорення цієї проблеми раніше було якесь питання. Інформація доступна або у_up_preprocess_page ..., або тимчасово в \ Drupal \ Core \ Render \ HtmlRenderer :: ready (), який, на жаль, не передає заголовок жодній події. Я думаю, ми повинні заповнити проблему проти друпальського ядра, щоб вирішити ситуацію ... оскільки це явна корисна ситуація для людей
Даніель Венер

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

Чи можете ви опублікувати посилання на проблему, яку ви подали на 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 є нульовим
rpayanm

@ RolandoPayánMosqueda, якщо ваша проблема є лише вдома, спробуйте виявити головну сторінку, а потім змінити її, я оновлюю свою відповідь
Yusef

Це трапляється не тільки в "Домашній", але і в "адміністраторі / змісті", і я впевнений, що на інших сторінках більше.
rpayanm

@ RolandoPayánMosqueda Я думаю, що це проблема drupal, drupal 8 - це 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;
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.