Wie zeige ich den aktuellen Knotentitel in page.html.twig ODER in node.html.twig an?

14

Wenn ich den aktuellen Knotentitel in page.html.twig anzeigen möchte (standardmäßig scheint er nur in node.html.twig verfügbar zu sein), muss ich eine Vorverarbeitungsfunktion wie die folgende erstellen:

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

Und dann muss ich page-title.html.twig überschreiben, indem ich es in meinen aktuellen Themenordner kopiere und alles auskommentiere.

Das scheint nicht "richtig" zu sein. Gibt es einen besseren Weg?

Greg
quelle

Antworten:

20

Der Knoten ist dank bereits in der Seitenvorlage verfügbar template_preprocess_page, sodass die Vorverarbeitungsfunktion nicht erforderlich ist. Sie können den Titel ausgeben mit:

{{ node.label }}

Der Seitentitel selbst ist ein Block. Wenn Sie ihn nicht mehr benötigen, entfernen Sie ihn einfach aus der Region unter / admin / structure / block. Sie müssen die Vorlage nicht in Ihr Design kopieren oder das Original ändern.

Clive
quelle
Dies scheint auf der Titelseite nicht zu funktionieren, wo nodeist nur NULL. Gibt es eine Möglichkeit, einen Seitentitel abzurufen, einschließlich des Titels der Startseite (auch wenn eine Titelüberschreibung verwendet wird)?
Florian Brucker
Das ist richtig @FlorianBrucker - wenn die Startseite kein Knoten ist, steht keine Knotenvariable zur Verfügung. Der Titel ist wahrscheinlich in page['#title'], ich bin nicht sicher, ob dies eine von VIews vorgenommene Überschreibung enthalten würde (aber wahrscheinlich)
Clive
@Clive Leider page['#title']ist hier ein leerer String drin page.html.twig.
Florian Brucker
Schade, ich denke, das war irgendwann in der Vergangenheit gültig, offensichtlich nicht jetzt. Diese ähnliche Frage könnte helfen
Clive
@Clive, danke für den Hinweis, aber das hat mir auch nicht geholfen. Ich habe eine Frage zu diesem Problem gestellt .
Florian Brucker
3

Sie können die folgenden Codes zum Anfang des node.html.twigVorlagenordners Ihres Themas hinzufügen :

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

Der Drupal 8-Code für die Ausführung des angezeigten Codes ist der folgende.

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
quelle