Ottieni il titolo della pagina


8

Quando ottengo il titolo in alcune pagine, ottengo un titolo vuoto come Home . Il codice che sto usando nel mio abbonato è il seguente.

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

È un problema? Come posso ripararlo?


1
Purtroppo al momento non esiste un'API chiara per farlo. C'era qualche problema per discuterne. Le informazioni sono disponibili in hook_preprocess_page ... o temporaneamente in \ Drupal \ Core \ Render \ HtmlRenderer :: prepar (), che purtroppo non passa il titolo a nessun evento. Immagino che dovremmo riempire un problema contro il nocciolo di Drupal per risolvere la situazione ... poiché si tratta di un chiaro caso d'uso per le persone
— Daniel Wehner,

@DanielWehner, cioè, lasciami creare un problema in drupal.org
— rpayanm,

Potresti pubblicare il link al problema che hai archiviato su drupal.org?
— anavarre

@anavarre questo è il problema drupal.org/node/2399615 , ma è stato chiuso perché è un duplicato di drupal.org/node/2264043
— rpayanm,

Risposte:


1

Il seguente codice può essere utilizzato per modificare il titolo della pagina.

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

0

Prova questo

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

?>

questo codice restituisce null in prima pagina, quindi dovresti provare a verificare se drupal_is_front_page quindi mostrare un altro titolo


Quel codice non funziona, nella pagina "Home" $ ​​title è null
— rpayanm

@ RolandoPayánMosqueda se il tuo problema è solo a casa, prova a rilevare la prima pagina e poi a cambiarlo, aggiorno la mia risposta
— Yusef

Questo non accade solo su "Home", anche su "admin / content" e ne sono sicuro in altre pagine.
— rpayanm,

@ RolandoPayánMosqueda Penso che sia un problema drupal, drupal 8 è beta3, non aspettarti che tutto funzioni correttamente, in particolare nuove funzionalità e API :)
— Yusef

0

Usa questo codice all'interno della tua funzione e otterrai il titolo di qualsiasi pagina come termine, pagina nodo ...

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;
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.