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?


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

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


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;
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.