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.