¿Cómo muestro el título del nodo actual en page.html.twig O en node.html.twig?

14

Si quiero mostrar el título del nodo actual en page.html.twig (de forma predeterminada, parece que solo está disponible en node.html.twig) tengo que crear una función de preproceso como esta:

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

Y luego tengo que sobrescribir page-title.html.twig copiándolo en mi carpeta de tema actual y comentando todo.

Esto no parece "correcto". ¿Hay una mejor manera?

Greg
fuente

Respuestas:

20

El nodo ya está disponible en la plantilla de página gracias a template_preprocess_page, por lo que no hay necesidad de la función de preproceso. Puede generar el título con:

{{ node.label }}

El título de la página en sí es un bloque, así que si ya no lo necesita, simplemente elimínelo de la región en / admin / structure / block. No es necesario copiar la plantilla a su tema o alterar el original.

Clive
fuente
Esto no parece funcionar en la portada, donde nodees justo NULL. ¿Hay alguna forma de obtener un título de página, incluido el título de la página principal (incluso cuando se utiliza una anulación de título )?
Florian Brucker
Eso es correcto @FlorianBrucker: a menos que la página principal sea un nodo, no tendría una variable de nodo disponible. El título probablemente esté en page['#title'], no estoy seguro de si eso contendría alguna anulación hecha por VIews (pero probablemente)
Clive
@Clive Desafortunadamente, page['#title']hay una cadena vacía page.html.twigaquí.
Florian Brucker
Lástima, creo que eso fue válido en algún momento en el pasado, obviamente ahora no. Esta pregunta similar podría ayudar
Clive
@Clive, gracias por el puntero, pero eso tampoco me ayudó. He publicado una pregunta sobre el tema .
Florian Brucker
3

Puede agregar los siguientes códigos en la parte superior de node.html.twigla carpeta de plantillas de su tema:

{% 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
fuente
0

El código de Drupal 8 para hacer lo que debe hacer el código que muestra es el siguiente.

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
fuente