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?


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

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


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;
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.