ノードテンプレートのエンティティ参照からフィールドをレンダリングするにはどうすればよいですか?[Drupal 8]


9

コンテキストについては、articleとteam_profileの2つのコンテンツタイプを扱っています。記事ノードには、作成者情報として機能するためにteam_profileノードを取得するエンティティ参照フィールドがあります。

新しい表示モードでエンティティをレンダリングするだけですが、デザインには、公開された日付と名前のすぐ上に、隣り合って写真が設定されています。 著者情報デザインのスクリーンショット

D7ではdpm($content)、ノード情報にドリルダウンし、ダブルクリックして、残りの参照パスを引き出します。私はキントを使用しており、エンティティ参照コンテンツを特定のレベルに吐き出すことができます{{ kint(content.field_blog_author[0]['#node']) }}。アクセスしたい次のレベルはですがvalues、次のレベルを試行するとNULLになります。

  • content.field_blog_author[0]['#node’][‘values’]
  • content.field_blog_author[0]['#node’]=>values
  • content.field_blog_author[0]['#node’]->values

最終的に、参照されたノードからのtitleおよびfield_team_imageフィールドをレンダリングしたいと思います(kint出力で確認できます)。これに関する情報は、ドキュメントや検索で見つかりませんでした。誰かが行き詰まるのを手伝ってくれませんか?

回答:


13

#node実際には現在のノードがあります。

フィールドとその値にアクセスする場合は、コンテンツではなくノードから始めます。これは、設定されたフィールドを持つレンダー配列です。

このような参照エンティティにアクセスできます{{ node.field_blog_author.entity }}

そこから、表示したい参照エンティティのフィールドに再び進むことができます。デフォルトの設定でビューを表示して、viewメソッドを呼び出すこともできます。また、ビューモードを文字列または配列の表示設定として渡すこともできます(twigでの正確な構文については不明です)。

また、私の標準的なリファレンスです。コンテンツエンティティの概要、構造、値へのアクセス方法については、http://wizzlern.nl/drupal/drupal-8-entity-cheat-sheetを参照してください。そのほとんどは小枝にも当てはまります。

そして最後に、コンテンツエンティティの内容を把握する場合は、node.toArray()を使用します。これにより、オブジェクトとしてアクセスする方法に非常に近い配列表現が得られます。内部構造はかなり異なりますが。


Berdirさん、ありがとうございました。{{ kint(node.field_blog_author.entity) }}参照されたノードの素敵な配列を出力しますが、これ以上深くすることはできません。{{ kint(node.field_blog_author.entity.title) }}たとえば、ページを中断し、リソースや何もヘッダー領域を越えてロードしません。nid他の人も同じです。ちょっと笑って、参照されたエンティティをノードのコンテンツに含めようとすると、そのようなテンプレートではノードを表示できないという一見エラーメッセージ{{ node.field_blog_author.entity }}返されました。
alexbea

これらは保護された値のようです。いいですか?写真だけの表示モードを作成してから、名前に「ラベル」表示モードを使用する必要があるかもしれません。
alexbea

はい、保護されています。すでに述べたように、node.field_blog_author.entity.titleでも機能するtoArray()を使用します。値を設定する場合は、... entity.title.valueが必要です。参照されているチートシートを必ず読んでください。これらの多くのことが説明されています。
Berdir

1
助けてくれてありがとう。チートシートの情報の使い方がよくわかりません。.valueこの場合、追加は機能し、私の元の質問に答えます。
alexbea

@berdirサイトのURLが壊れています。
chalo
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.