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?
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.
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 %}
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;
}
}