Creare Titolo e Sottotitolo in un Tema Drupal 8

Il sistema di temi di Drupal 8 cambia fortemente rispetto a Drupal 7.

La prima cosa da imparare è che il titolo della pagina, di default, è un blocco!

Quindi non cercate di inserire nel vostro node.tpl.twig o page.tpl.twig l'attributo {{title}} funzionerebbe, ma non sarebbe la soluzione ideale.

Bisogna intervenire su un template di default che si chiama page-title.html.twig (createlo se non l'avete).

Immaginiamo poi di aver aggiunto dei campi al nostro content type (es: il Blog), che vogliamo visualizzare nel titolo (nel nostro caso un sottotitolo ed un'immagine).

Bisogna fare così:

1) Aggiungere in MIOTEMA.theme (il file che si trova nella cartella del tema) una funzione di preprocessing, che passi i campi che ci servono al template, esempio:

function MIOTEMA_preprocess_page_title(&$variables) {
  if ($node = \Drupal::routeMatch()->getParameter('node')) {
    if (isset($node->field_image)) {
      $variables['page_title_image'] = $node->get('field_image')->view('full');
    }
    if (isset($node->field_subtitle)) {
      $variables['subtitle'] = $node->get('field_subtitle');
    }
  }
}

2) Nel file page-title.html.twig a questo punto si possono utilizzare le variabili create semplicemente scrivendole tra {{ }}, come nell'esempio che segue

{% if title %}
<div class="page-header dark larger larger-desc">
                <div class="container">
                    <div class="row">
                        <div class="col-md-6">
                            {{ title_prefix }}
                            <h1>{{ title }}</h1>
                            <p class="page-header-desc">{{subtitle.value}}</p>
                            {{ title_suffix }}
                        </div><!-- End .col-md-6 -->
                    </div><!-- End .row -->
                </div><!-- End .container -->
    </div><!-- End .page-header -->
{% endif %}