web-dev-qa-db-ja.com

ノードコンテンツをpage.html.twigレベルでレンダリングするか、node.html.twigレベルでブロックします

Drupal 8サイトの設計では、ノードコンテンツの中央にビューブロックと静的ブロックが想定されています。

(page.html.twigレベルの)ブロック領域の周りにノードコンテンツをレンダリングする方法、(node.html.twigレベルの)ノードコンテンツの中央にブロック領域をレンダリングする方法、またはその他の方法を理解しようとしています年齢のために、回避します。

1つの方法は、コンテキストブロックとnode.html.twigの他のノードコンテンツフィールドを含むビューブロックのノードコンテンツの一部をレンダリングすることだと思いますが、システムのリソースがどれほど重いかわかりません。

これを可能な限り効率的に解決するために、ここにいる誰かが考え得る提案/解決策があれば、私はそれらについて聞いてとても幸せです。

ベスト、

アラリ

3
Alari Truuts

したがって、1つは、使用可能なノードオブジェクトに直接アクセスすることです。例えば。 {{node.some_field.value}}(テキストフィールドの生の値を出力します。ほとんどの場合は必要ありません)または{{node.some_field.view()}}(デフォルトのフォーマッタ設定を使用して表示します) 、表示モードまたはフォーマッタ設定を提供することもできます)。

コメントとして既に追加した2つの関連する質問も参照してください。 page.html.twig内のノードフィールドをレンダリングする AND page.html.twigのノードから画像フィールドをレンダリングする

ご存知のように、これにブロックを使用することもできます。ただし、そのためのビューの使用は少し逆です。ビューはクエリを実行します。つまり、既に読み込まれているIDからノードを取得し、クエリを実行してノードIDを取得し、そのノードを再度取得しますNode ID;)

代わりに、D8のブロックはコンテキストをサポートします。そのため、サイトから物を注入して直接使用することができます。これについてのいくつかの説明は https://drupal.stackexchange.com/a/188629/31 を参照してください。カスタムブロックを自分で実装して必要なものを出力するか、ctoolsが提供するブロックを使用して、特定の表示モードでノードを表示できます。

3
Berdir

twigではphpを使用できません。モジュールを使用するのが唯一の方法だと思います。

Display Suite

Display Suiteでは、ドラッグアンドドロップインターフェイスを使用して、コンテンツの表示方法を完全に制御できます。ノード、ビュー、コメント、ユーザーデータなどを、何十ものテンプレートファイルを操作しなくても、好きなように配置できます。事前定義されたレイアウトのリスト(D7のみ)を使用して、さらにドラッグアンドドロップを楽しめます。

表示スイートを使用すると、ブロックをフィールドとして追加できます。

パネル

パネルモジュールを使用すると、サイト管理者は複数の用途に合わせてカスタマイズされたレイアウトを作成できます。その中心となるのは、レイアウトを視覚的に設計してそのレイアウト内にコンテンツを配置できるドラッグアンドドロップコンテンツマネージャーです。他のシステムとの統合により、これを使用するノード、これを使用するランディングページを作成し、分類やノードページなどのシステムページをオーバーライドして、非常に細かい権限でサイトのレイアウトをカスタマイズできます。

基本的にはDisplay Suiteの代替です。これらのモジュールはどちらも素晴らしいです。 Panelsは、Display Suiteよりも簡単にレイアウトシステムを作成できます。


これらのモジュールのいずれかを使用すると、次のようなことができます

フィールドA

ブロックまたはブロックビュー

フィールドB

1
No Sssweat

また、フィールドに複数の値がある場合、page.html.twigのフィールドの構文はnode.some_field [x] .valueです。 Xはフィールド値配列の位置を表します。

1
etz01