Comment afficher le titre du nœud actuel dans page.html.twig OU dans node.html.twig?

14

Si je veux afficher le titre du nœud actuel dans page.html.twig (par défaut, il ne semble être disponible que dans node.html.twig), je dois créer une fonction de prétraitement comme ceci:

function theme_preprocess_page(&$variables, $hook) {
  // Set our page title so we can access it in page.html.twig
  if ($node = \Drupal::routeMatch()->getParameter('node')) {
    $variables['my_node_title'] = $node->title->value;
  }
}

Et puis je dois écraser page-title.html.twig en le copiant dans mon dossier de thème actuel et en commentant tout.

Cela ne semble pas "correct". Y a-t-il une meilleure façon?

Greg
la source

Réponses:

20

Le nœud est déjà disponible dans le modèle de page grâce à template_preprocess_page, il n'y a donc pas besoin de la fonction de prétraitement. Vous pouvez sortir le titre avec:

{{ node.label }}

Le titre de la page lui-même est un bloc, donc si vous n'en avez plus besoin, supprimez-le de la région dans / admin / structure / block. Pas besoin de copier le modèle sur votre thème ou de modifier l'original.

Clive
la source
Cela ne semble pas fonctionner sur la première page, où nodeest juste NULL. Existe-t-il un moyen d'obtenir un titre de page, y compris le titre de la première page (même lorsqu'un remplacement de titre est utilisé)?
Florian Brucker
C'est correct @FlorianBrucker - à moins que la page d'accueil ne soit un nœud, vous n'auriez pas de variable de nœud disponible. Le titre est probablement page['#title']dedans, je ne sais pas si cela contiendrait une dérogation faite par VIews (mais probablement)
Clive
@Clive Malheureusement, page['#title']c'est une chaîne vide page.html.twigici.
Florian Brucker
Dommage, je pense que c'était valable à un moment donné dans le passé, évidemment pas maintenant. Cette question similaire pourrait aider
Clive
@Clive, merci pour le pointeur mais cela ne m'a pas aidé non plus. J'ai posté une question concernant le problème .
Florian Brucker
3

Vous pouvez ajouter les codes ci-dessous en haut du node.html.twigdossier des modèles de votre thème:

{% if not page %}
  <h2{{ title_attributes }}>
    <a href="{{ url }}" rel="bookmark">{{ label }}</a>
  </h2>
{% endif %}

{% if page %}
  <h2{{ title_attributes }}>
    {{ label }}
  </h2>
{% endif %}
Mojtaba Reyhani
la source
0

Le code Drupal 8 pour faire ce que le code que vous avez montré doit faire est le suivant.

function theme_preprocess_page(&$variables) {
  $request = \Drupal::request();
  $route_match = \Drupal::routeMatch();
  if ($route_match->getParameter('node')) {
    $page_title = \Drupal::service('title_resolver')->getTitle($request, $route_match->getRouteObject());
    $variables['my_node_title'] = $page_title;
  }
}
kiamlaluno
la source