Obter título da página

8

Quando recebo o título em algumas páginas, recebo um título vazio, como Início . O código que estou usando no meu assinante é o seguinte.

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

Isso é um problema? Como eu posso consertar isso?

rpayanm
fonte
11
No momento, não existe uma API clara para fazer isso, infelizmente. Costumava haver algum problema para discutir esse problema. As informações estão disponíveis em hook_preprocess_page ... ou temporariamente em \ Drupal \ Core \ Render \ HtmlRenderer :: prepare (), que infelizmente não passa o título para nenhum evento. Eu acho que deveríamos preencher uma questão contra o núcleo drupal para resolver a situação ... já que essa é uma clara maneira de usar as pessoas. #
Daniel Wehner
@DanielWehner isto é, deixe-me criar um problema no drupal.org
rpayanm
Poderia, por favor, postar o link para o problema que você arquivou no drupal.org?
anavarre
@anavarre esta é a questão drupal.org/node/2399615 , mas foi fechada porque é um duplicado de drupal.org/node/2264043
rpayanm

Respostas:

1

O código a seguir pode ser usado para alterar o título da página.

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

Tente isto

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

?>

Se esse código retornar nulo na primeira página, tente verificar se drupal_is_front_page mostra outro título

Yusef
fonte
Esse código não funciona, na página "Home" $ ​​title é nulo
rpayanm
@ RolandoPayánMosqueda se o seu problema está apenas em casa, tente detectar a primeira página e depois alterá-la, eu atualizo minha resposta
Yusef
Não é só isso que ocorre em "Página inicial", mas também em "admin / content", e tenho certeza de que outras páginas serão mais.
rpayanm
@ RolandoPayánMosqueda Eu acho que é uma questão Drupal, Drupal 8 é beta3, não espere que tudo funcione corretamente, especialmente novos recursos e APIs :)
Yusef
0

Use este código dentro de sua função e você obterá o título de qualquer página, como termo, página do nó ...

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
fonte