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.