Geçerli düğüm başlığını page.html.twig VEYA node.html.twig'de nasıl gösterebilirim?


14

Geçerli düğüm başlığını page.html.twig içinde göstermek istiyorsanız (varsayılan olarak yalnızca node.html.twig'de kullanılabilir gibi görünüyor) Ben böyle bir önişleme işlevi oluşturmak zorunda:

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

Ve sonra geçerli tema klasörüme kopyalayıp her şeyi yorumlayarak page-title.html.twig'in üzerine yazmam gerekiyor.

Bu "doğru" görünmüyor. Daha iyi bir yol var mı?

Yanıtlar:


21

Düğüm sayesinde sayfa şablonunda zaten kullanılabilir template_preprocess_page, bu nedenle önişleme işlevine gerek yoktur. Başlığı şununla çıkarabilirsiniz:

{{ node.label }}

Sayfa başlığının kendisi bir bloktur, bu yüzden artık ihtiyacınız yoksa / admin / structure / block konumundaki bölgeden kaldırın. Şablonu temanıza kopyalamanıza veya orijinali değiştirmenize gerek yoktur.


Bu nodesadece ön sayfada işe yaramıyor gibi görünüyor NULL. Ön sayfa başlığı da dahil olmak üzere herhangi bir sayfa başlığı almanın bir yolu var mı (bir başlık geçersiz kılma kullanıldığında bile )?
Florian Brucker

Bu doğru @FlorianBrucker - ön sayfa bir düğüm değilse, bir düğüm değişkeniniz olmazdı. Başlık büyük olasılıkla page['#title'], VIews tarafından yapılan herhangi bir geçersiz kılma içerip içermeyeceğinden emin değilim (ama muhtemelen)
Clive

@Clive Ne yazık ki, buraya page['#title']boş bir dize page.html.twig.
Florian Brucker

Yazık, sanırım bu geçmişte bir noktada geçerliydi, açıkçası şimdi değil. Bu benzer soru yardımcı olabilir
Clive

@Clive, işaretçi için teşekkürler ama bu da bana yardımcı olmadı. Konuyla ilgili bir soru gönderdim .
Florian Brucker

3

node.html.twigTemanızın şablonlar klasörünün üstüne aşağıdaki kodları ekleyebilirsiniz :

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

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

0

Gösterdiğiniz kodun yapması gereken şeyi yapmak için Drupal 8 kodu aşağıdaki gibidir.

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;
  }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.