web-dev-qa-db-fra.com

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

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?

14
Greg

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.

21
Clive

Vous pouvez ajouter les codes ci-dessous en haut de node.html.twig dans le dossier 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 %}
3
Mojtaba Reyhani

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;
  }
}
0
kiamlaluno