it-swarm.com.de

Wie kann ich in Drupal 8) den Seitentitel innerhalb eines Absatzes drucken.html.twig

Gibt es eine Möglichkeit, den Seitentitel in eineragraph.html.twig zu drucken?

In Drupal 7) können Sie einfach ein drupal_get_title () in einer tpl.php ausführen und es als Variable verwenden.

Diese Funktion wird abgeschrieben und von dem, worüber ich gelesen habe TWIG nicht im Sinne eines Themas in Drupal 8 jetzt).

Was ist der Drupal 8 Weg, dies zu tun?

4
TimLostInD8

Eine alternative Strategie zum Festlegen des Cache-Kontexts besteht darin, einen Platzhalter zu verwenden. Dies ist ein komplexerer Ansatz, aber Sie werden nie Probleme mit dem Auffüllen der Datenbank-Cache-Tabelle haben - wie 4k4 hervorhebt, kann dies ein echtes Problem sein.

Der gesamte Code befindet sich in themename.theme.

Zuerst müssen wir eine Rückruffunktion definieren, die den Seitentitel an den Platzhalter zurückgibt:

function _MyTheme_paragraphs_title_placeholder($page_title) {
  // Must go here, if you attempt to pass in $page_title from preprocess it will
  // be cached!
  $request = \Drupal::request();
  $route_match = \Drupal::routeMatch();
  $page_title = \Drupal::service('title_resolver')->getTitle($request, $route_match->getRouteObject());

  $title_array = array(
    '#theme' => 'page_title',
    '#title' => $page_title,
  );

  return $title_array;
}

Als nächstes erstellen wir den Platzhalter im Vorprozess. Wir drucken eine Variable in der Vorlage, also müssen wir sie mit dem Platzhalter füllen:

function MyTheme_preprocess_paragraph(&$variables) {
  // Note: the first item in the #lazy_builder array is our callback.
  $placeholder_title = array(
    '#lazy_builder' => ['_MyTheme_paragraphs_title_placeholder', ['page_title']],
    '#create_placeholder' => TRUE,
  );

  $variables['title'] = $placeholder_title;
}

Erstellen Sie abschließend eine Kopie der Absatzvorlage und verwenden Sie die Titelvariable:

<div{{ attributes.addClass(classes) }}>
  {{ title }}
  {{ content }}
</div>

Auf diese Weise habe ich die Breadcrumb-Titelfunktion in Adaptivetheme (D8-Version) implementiert, um die URL des Cache-Kontexts zu vermeiden, da ich die Datenbankeinträge bemerkt habe. Ich denke, es ist eine großartige Methode und ich würde mich über mehr Feedback freuen, wenn ich etwas falsch gemacht habe - ich Ich bin natürlich ein Themer, kein Hardcore-Entwickler :)

6
Jeff Burnz

Sie können den Code aus dem vorverarbeiteten Breadcrumb ausleihen:

function mytheme_preprocess_paragraph(&$variables)
  $request = \Drupal::request();
  $route_match = \Drupal::routeMatch();
  $variables['title'] = \Drupal::service('title_resolver')->getTitle($request, $route_match->getRouteObject());

  $variables['#cache']['contexts'][] = 'url';
}

Zweig:

{{ title }}

Sie müssen einen Cache-Kontext festlegen. Normalerweise wird ein Absatz zwischengespeichert, bis das Cache-Tag durch eine Änderung in der Datenbank ungültig wird. Es wird mit dem Titel angezeigt, mit dem es zuerst generiert wurde, auf allen folgenden Seiten. Wenn Sie einen Kontext für die URL verwenden, erhalten Sie für jeden neuen Pfad eine neue zwischengespeicherte Version des Absatzes. Dadurch wird Ihre Cache-Tabelle gefüllt. Sie sollten also versuchen, nur die Absätze anzuvisieren, in denen Sie den Titel benötigen.

Oder denken Sie an eine andere Lösung, denn wenn Sie eine große Website mit vielen Seiten haben, ist dies möglicherweise überhaupt keine gute Idee.

4
4k4