web-dev-qa-db-ja.com

ノードテンプレートでノードフィールドとラベルをレンダリングする

Drupal 8テーマAPI、hook_preprocess_HOOK()を含む)、およびTwigデバッグは有効です。

ただし、私ができることは、node--tool--full.html.twigテンプレート内で、ノードの個々のフィールドとオプションのラベルをすべて制御することです。 (私のコンテンツタイプのマシン名はtoolです。)

また、Twigテンプレートの{{ content }}への呼び出しを省略して、このように個別にフィールドを呼び出すこともできます。

{{content.body}}
{{content.field_application_purpose}}
{{content.field_application_uses}}

そしてもちろん、レンダリングされたマークアップを含むフィールドを完全に制御したい場合(たとえば、field_application_uses)、別のテンプレート(field--node--field-application-uses--tool.html.twig)を作成してから、フィールドとそのラベルを任意のマークアップで囲みます。

ここまでは順調ですね。

しかし、ノードテンプレート(この場合はnode--tool--full.html.twig)からこれらすべてをどのように制御できますか?

私のノードは、フィールドラベルを含めて翻訳可能です。

Node/content type/bundleのすべてのフィールドのフィールドテンプレートを作成する代わりに、私がやりたいことは次のようなものです。

<article{{ attributes.addClass(classes) }}>
  ...
  <div class="application-purpose">
    <h3>{{ node.field-application_purpose.label}}</h3>
    <p>{{ node.field-application_purpose.value }}</p>
  </div>

  <div class="application-uses">
    <h3>{{ node.field_application_uses.label}}</h3>
    <p>{{ node.field_application_uses.value }}</p>
  </div>
  ...
</article>

上記のテンプレートスニペットは値に対しては機能しますが、ラベルに対しては機能しません。ラベルを取得する場所を探すのに何時間も費やしました。

Field--node--field-application-uses--tool.html.twigでは、ラベルは変数として使用できますが、これをノードテンプレートレベルで取得するにはどうすればよいですか?

各フィールドのテンプレートを作成する必要があるのではなく、すべてのフィールドとそのマークアップを単一のテンプレートであるノードテンプレートに保持するのが理想的です。

5
Blue Waters

ラベルはフィールド定義にあります。fieldDefinitionの前にlabelを追加する必要があります:

{{ node.field_myfield.fieldDefinition.label }}

これを説明すると、nodeはノードオブジェクトです。コンテンツは、表示モードで構成されたとおりに構築されるフィールドのレンダー配列です。ノードでは、ノードのすべてのフィールドの生の値と定義を見つけます。コンテンツでは、表示モードに含まれているフィールドのみが見つかり、表示モードで構成されているようにすでにフォーマットされています。また、各フィールドはコンテンツ内のオブジェクトとして見つかりますが、フィールドがそこにあるかどうかはわかりません。誰かが後でビューモードからフィールドを削除すると、コードはnull値を取得するためです。

5
4k4

フィールドラベルとフィールド値を個別に印刷できるこのモジュールを作成しました: https://www.drupal.org/sandbox/sutharsan/276318

<strong>{{ content.field_name|field_label }}</strong>: {{ content.field_name|field_value }}

あなたに役立つかどうかをお知らせください。完全なプロジェクトにプロモートします。

2
Sutharsan