Obtenir le titre de la page

8

Lorsque j'obtiens le titre sur certaines pages, j'obtiens un titre vide comme Accueil . Le code que j'utilise chez mon abonné est le suivant.

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

C'est un problème? Comment puis-je le réparer?

rpayanm
la source
1
Il n'y a actuellement aucune API claire pour le faire, malheureusement. Il y avait un problème pour discuter de ce problème. Les informations sont disponibles dans hook_preprocess_page ... ou temporairement dans \ Drupal \ Core \ Render \ HtmlRenderer :: prepare (), qui malheureusement ne transmet le titre à aucun événement. Je suppose que nous devons résoudre un problème contre le noyau drupal pour résoudre la situation ... car il s'agit d'un cas d'utilisation clair pour les gens
Daniel Wehner
@DanielWehner c'est-à-dire, laissez-moi créer un problème dans drupal.org
rpayanm
Pourriez-vous s'il vous plaît poster le lien vers le problème que vous avez déposé sur drupal.org?
anavarre
@anavarre c'est le problème drupal.org/node/2399615 , mais a été fermé car il s'agit d'un doublon de drupal.org/node/2264043
rpayanm

Réponses:

1

Le code suivant peut être utilisé pour modifier le titre de la page.

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

Essaye ça

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

?>

ce code retourne null en première page, alors vous devriez essayer de vérifier si drupal_is_front_page puis afficher un autre titre

Yusef
la source
Ce code ne fonctionne pas, sur la page "Accueil" $ title est nul
rpayanm
@ RolandoPayánMosqueda si votre problème est uniquement à la maison, essayez de détecter la première page puis changez-la, je mets à jour ma réponse
Yusef
Non seulement sur "Accueil" cela se produit, sur "admin / content" aussi et je suis sûr que sur d'autres pages plus.
rpayanm
@ RolandoPayánMosqueda Je pense que c'est un problème drupal, drupal 8 est beta3, ne vous attendez pas à ce que tout fonctionne correctement, spécialement les nouvelles fonctionnalités et API :)
Yusef
0

Utilisez ce code dans votre fonction et vous obtiendrez le titre de n'importe quelle page comme un terme, une page de noeud ...

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
la source