Come posso mostrare il titolo del nodo corrente in page.html.twig O in node.html.twig?


14

Se voglio mostrare il titolo del nodo corrente in page.html.twig (per impostazione predefinita sembra essere disponibile solo in node.html.twig) Devo creare una funzione di preelaborazione in questo modo:

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

E poi devo sovrascrivere page-title.html.twig copiandolo nella mia cartella del tema corrente e commentando tutto.

Questo non sembra "giusto". C'è un modo migliore?

Risposte:


20

Il nodo è già disponibile nel modello di pagina grazie a template_preprocess_page, quindi non è necessaria la funzione di preelaborazione. È possibile generare il titolo con:

{{ node.label }}

Il titolo della pagina stesso è un blocco, quindi se non è più necessario rimuoverlo dalla regione in / admin / struttura / blocco. Non è necessario copiare il modello sul tema o modificare l'originale.


Questo non sembra funzionare in prima pagina, dove nodeè giusto NULL. C'è un modo per ottenere qualsiasi titolo di pagina, incluso il titolo della prima pagina (anche quando viene utilizzato un override del titolo )?
Florian Brucker,

È corretto @FlorianBrucker - a meno che la prima pagina non sia un nodo, non si avrebbe una variabile di nodo disponibile. Il titolo è probabilmente in page['#title'], non sono sicuro se questo conterrebbe qualsiasi sostituzione fatta da VIews (ma probabilmente)
Clive

@Clive Purtroppo qui page['#title']c'è una stringa vuota page.html.twig.
Florian Brucker

Peccato, penso che fosse valido ad un certo punto in passato, ovviamente non ora. Questa domanda simile potrebbe essere d'aiuto
Clive

@Clive, grazie per il puntatore ma neanche questo mi ha aiutato. Ho pubblicato una domanda relativa al problema .
Florian Brucker

3

Puoi aggiungere i seguenti codici nella parte superiore della node.html.twigcartella dei modelli del tuo tema:

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

{% if page %}
  <h2{{ title_attributes }}>
    {{ label }}
  </h2>
{% endif %}

0

Il codice Drupal 8 per fare ciò che il codice che hai mostrato dovrebbe fare è il seguente.

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;
  }
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.