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?


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

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


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;
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.