page.html.twigまたはnode.html.twigで現在のノードタイトルを表示するにはどうすればよいですか?


14

page.html.twigに現在のノードタイトルを表示したい場合(デフォルトではnode.html.twigでのみ使用可能と思われます)、次のような前処理関数を作成する必要があります。

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

そして、page-title.html.twigを現在のテーマフォルダーにコピーし、すべてコメント化して上書きする必要があります。

これは「正しい」とは思えません。もっと良い方法はありますか?

回答:


20

おかげで、ノードはページテンプレートで既に利用可能になっているtemplate_preprocess_pageので、前処理機能は必要ありません。以下を使用してタイトルを出力できます。

{{ node.label }}

ページタイトル自体はブロックなので、必要ない場合は、/ admin / structure / blockのリージョンから削除してください。テンプレートをテーマにコピーしたり、オリジナルを変更したりする必要はありません。


これは、フロントページでnodeは機能しないようですNULL。フロントページのタイトルを含むページタイトルを取得する方法はありますか(タイトルのオーバーライドが使用されている場合でも)。
フロリアンブラッカー

それは正しい@FlorianBruckerです-フロントページがノードでない限り、ノード変数は使用できません。タイトルはおそらくにpage['#title']ありますが、それがVIewsによって行われたオーバーライドを含むかどうかはわかりません(ただし、おそらく)
クライブ

@Clive残念ながら、ここにpage['#title']空の文字列がありpage.html.twigます。
フロリアンブラッカー

残念ですが、それは過去のある時点で有効だったと思いますが、明らかに現在ではありません。この同様の質問が役立つ場合があります
クライブ

@Clive、ポインターに感謝しますが、それも私を助けませんでした。問題に関する質問を投稿しまし
フロリアンブラッカー

3

node.html.twigテーマのテンプレートフォルダーの上部に以下のコードを追加できます。

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

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

0

示したコードが行うべきことを行うためのDrupal 8コードは次のとおりです。

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;
  }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.