Obtener el título de la página

8

Cuando obtengo el título en algunas páginas, obtengo un título vacío como Inicio . El código que estoy usando en mi suscriptor es el siguiente.

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

Es un problema? ¿Cómo puedo arreglarlo?

rpayanm
fuente
1
Actualmente no hay una API clara para hacerlo, lamentablemente. Solía ​​haber algún problema para discutir ese problema. La información está disponible en hook_preprocess_page ... o temporalmente en \ Drupal \ Core \ Render \ HtmlRenderer :: prepare (), que lamentablemente no pasa el título a ningún evento. Supongo que deberíamos resolver un problema contra el núcleo de drupal para resolver la situación ... ya que este es un caso de uso claro para las personas
Daniel Wehner
@DanielWehner es decir, déjame crear un problema en drupal.org
rpayanm
¿Podría publicar el enlace al problema que ha presentado en drupal.org?
anavarre
@anavarre este es el problema drupal.org/node/2399615 , pero se cerró porque es un duplicado de drupal.org/node/2264043
rpayanm el

Respuestas:

1

El siguiente código se puede usar para cambiar el título de la página.

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

Prueba esto

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

?>

este código devuelve un valor nulo en la página principal, entonces debe intentar verificar si drupal_is_front_page muestra otro título

Yusef
fuente
Ese código no funciona, en la página "Inicio" $ title es nulo
rpayanm
@ RolandoPayánMosqueda si su problema es solo en el hogar, intente detectar la página principal y luego cámbiela, actualizo mi respuesta
Yusef
Esto no solo ocurre en "Inicio", sino también en "admin / contenido" y estoy seguro de que en otras páginas más.
rpayanm
@ RolandoPayánMosqueda Creo que es un problema de drupal, drupal 8 es beta3, no esperes que todo funcione correctamente, especialmente nuevas características y API :)
Yusef
0

Use este código dentro de su función y obtendrá el título de cualquier página como término, página de 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;
}
AshwinP
fuente