page.html.twig内にノードフィールドをレンダリングする


12

コンテンツタイプに画像フィールドがあります(field_hero_image)。

node.html.twigファイルでレンダリングしたくありません。しかし、私はそれをpage.html.twigファイルでレンダリングしたいと思います。具体的には、ページタイトルと一緒にレンダリングしたいと考えています。

ノードレベルのフィールドにアクセスしてレンダリングするために、page.html.twigファイルでどのコードを使用しますか?

(同様の質問が投稿されていますが、そこに提供されている回答を使用して問題を解決することはできませんでした。)

これはDrupal 8テーマ用です。


2
@kiamlaluno-なぜ私の質問を編集したのですか?タイトルと質問に「Drupal 8」を含めると、潜在的な入力プロバイダーに明らかになり、Drupal 6と7のコンテンツの普及により、Googleでの検索がはるかに簡単になります。Drupal 8の質問/回答を非常に明確にすることは、コミュニティ全体でD8固有の回答を探すのに役立ちます。それを変更する理由は何だったのかと思っていました。
kraftybasterd 2016年

質問のタイトルでタグを重複させないでください。タグは、質問が表示されるすべての場所で表示されるため、質問のタイトルでもタグを使用する必要はありません。
kiamlaluno

2
明らかに、私はここに新しい...ですが、メタタグ(この場合は「8」)は検索エンジンの結果に役立ちますか?Drupal 8またはDrupal 7を含むコンテンツタイトルは、Googleで回答を検索する人々を潜在的に助けることができると思います...
kraftybasterd 2016年

回答:


24

かなり多くの調査を行った後、私は他の質問とdrupal.orgで自分がやりたいことを達成するのに十分な部分を見つけることができました。

この回答には前処理は必要ないため、mytheme.themeファイルにコードを追加する必要はありません。
これらの変数はすべて、デフォルトでpage.html.twigですでにアクセス可能です。

page.html.twig内にフィールドのデフォルト値をレンダリングするには、通常、のようにTwig変数を使用し{{ node.field_some_name.value }}ます。

画像フィールドがあり、そのフィールドに格納されている画像のURLをpage.html.twigテンプレート内にレンダリングする場合は、を使用します{{ file_url(node.field_some_image.entity.fileuri) }}

最後に、page.html.twigテンプレート内のノードのタイトルをレンダリングする場合は、を使用します{{ node.label }}

また、特定の問題に対してTwigの条件文を使用する方法も学びましたが、それはこの質問/回答の範囲を超えています。


私は懐疑的で、D7ではこの種のことは常に前処理関数などにあるべきだという印象を持っていました。しかし、file_url()ドキュメントの例(drupal.org/docs/8/theming/twig/functions-in-twig-templates)はこれを正確に行うため、賛成です。
Graham C

特定のコンテンツタイプをループして、そのフィールド値を内部に出力するにはどうすればよいですpage.html.twigか?
Naourass Derouichi

2

これを扱うには3つの便利な方法があり、すべて複雑なレンダー配列を掘り下げる時間を節約できます。

  1. Display Suite(サブモジュールds_extras を使用)を使用すると、異なる表示モード(つまり、ヒーロー画像を含むもの)であるブロック(「ブロック領域」)をヒーロー領域に割り当てることができます。したがって、2つの異なる表示モードが同時に表示されます。これを行うと予想したように、一部の前処理フックが起動しない場合があることに注意してください。

  2. twig_tweakモジュールは大幅にそのようなタスクを簡素化し、フィールド値のためのより容易な小枝文を与えることができます。一般的な使用方法については、チートシートご覧ください{{ drupal_field('field_image', 'node', 1) }}。関数のシグネチャは次のとおりです。drupalField($field_name, $entity_type, $id = NULL, $view_mode = 'default', $langcode = NULL)

  3. twig_field_valueのモジュールは、より単純な小枝文になります。README.txtによると:<img src={{ file_url(content.field_image|field_target_entity.uri.value) }} alt={{ content.field_image|field_raw('alt') }} />

私がこれを以前に知っていたなら、それは私にかなりの時間を節約したでしょう!


1
これは正解です。私の経験で{{ node.field_some_name.value }}は、フィールドをレンダリングしません。完全なテーマシステム(前処理関数、テンプレートなど)は呼び出されません。OTOH、twig_tweakモジュールを使用すると、完全にレンダリングされたフィールドを取得できます{{ node.field_some_name|view }}
kentr
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.