Titel der Seite abrufen

8

Wenn ich den Titel auf einigen Seiten erhalte, erhalte ich einen leeren Titel wie " Startseite" . Der Code, den ich in meinem Abonnenten verwende, ist der folgende.

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

Es ist ein Problem? Wie kann ich das beheben?

rpayanm
quelle
1
Leider gibt es derzeit keine eindeutige API dafür. Früher gab es ein Problem, um dieses Problem zu diskutieren. Die Informationen sind entweder in hook_preprocess_page ... oder vorübergehend in \ Drupal \ Core \ Render \ HtmlRenderer :: prepare () verfügbar, wodurch der Titel leider nicht an ein Ereignis weitergegeben wird. Ich denke, wir sollten ein Problem gegen den Drupal-Kern lösen, um die Situation zu lösen ... da dies ein klarer Anwendungsfall für Menschen ist
Daniel Wehner
@ DanielWehner das heißt, lassen Sie mich ein Problem in drupal.org
rpayanm
Könnten Sie bitte den Link zu dem Problem posten, das Sie auf drupal.org eingereicht haben?
anavarre
@anavarre Dies ist das Problem drupal.org/node/2399615 , wurde aber geschlossen, weil es ein Duplikat von drupal.org/node/2264043
rpayanm

Antworten:

1

Mit dem folgenden Code können Sie den Seitentitel ändern.

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

Versuche dies

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

?>

Dieser Code gibt auf der Startseite null zurück. Dann sollten Sie versuchen zu überprüfen, ob drupal_is_front_page einen anderen Titel anzeigt

Yusef
quelle
Dieser Code funktioniert nicht, auf "Home" -Seite $ title ist null
rpayanm
@ RolandoPayánMosqueda Wenn Ihr Problem nur zu Hause ist, versuchen Sie, Titelseite zu erkennen, dann ändern Sie es, ich aktualisiere meine Antwort
Yusef
Dies tritt nicht nur bei "Home" auf, sondern auch bei "admin / content" und ich bin mir auf anderen Seiten sicher mehr.
Rpayanm
@ RolandoPayánMosqueda Ich denke, es ist ein Drupal-Problem, Drupal 8 ist Beta3, erwarten Sie nicht, dass alles richtig funktioniert, insbesondere neue Funktionen und APIs :)
Yusef
0

Verwenden Sie diesen Code in Ihrer Funktion und Sie erhalten den Titel einer beliebigen Seite wie Begriff, Knotenseite ...

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
quelle