Uzyskaj tytuł strony

8

Gdy otrzymuję tytuł na niektórych stronach, otrzymuję pusty tytuł, np . Dom . Kod, którego używam u mojego subskrybenta, jest następujący.

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

To jest problem? Jak mogę to naprawić?

rpayanm
źródło
1
Niestety, obecnie nie ma jasnego API do zrobienia tego. Dyskutowano o tym problemie. Informacje są dostępne na stronie hook_preprocess_page ... lub tymczasowo w \ Drupal \ Core \ Render \ HtmlRenderer :: prepar (), który niestety nie przekazuje tytułu żadnemu zdarzeniu. Myślę, że powinniśmy rozwiązać problem z rdzeniem drupala, aby rozwiązać sytuację ... ponieważ jest to oczywisty przykład dla ludzi
Daniel Wehner,
@DanielWehner to znaczy pozwól mi utworzyć problem w drupal.org
rpayanm
Czy możesz zamieścić link do zgłoszenia problemu na drupal.org?
anavarre
@anavarre to jest problem drupal.org/node/2399615 , ale został zamknięty, ponieważ jest duplikatem drupal.org/node/2264043
rpayanm

Odpowiedzi:

1

Do zmiany tytułu strony można użyć następującego kodu.

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

Spróbuj tego

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

?>

ten kod zwraca null na pierwszej stronie, powinieneś spróbować sprawdzić, czy drupal_is_front_page, a następnie pokaż inny tytuł

Yusef
źródło
Ten kod nie działa, na stronie „Strona główna” $ tytuł jest zerowy
rpayanm
@ RolandoPayánMosqueda, jeśli twój problem występuje tylko w domu, spróbuj wykryć pierwszą stronę, a następnie zmień ją, aktualizuję swoją odpowiedź
Yusef
Występuje to nie tylko w „Home”, w „admin / content” i jestem pewien, że na innych stronach więcej.
rpayanm
@ RolandoPayánMosqueda Myślę, że to problem z drupalem, drupal 8 to beta3, nie oczekuj, że wszystko działa poprawnie, szczególnie nowe funkcje i interfejsy API :)
Yusef
0

Użyj tego kodu w swojej funkcji, a otrzymasz tytuł dowolnej strony, takiej jak termin, strona węzła ...

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;
}
AshwinP
źródło