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では、ラベルは変数として使用できますが、これをノードテンプレートレベルで取得するにはどうすればよいですか?
各フィールドのテンプレートを作成する必要があるのではなく、すべてのフィールドとそのマークアップを単一のテンプレートであるノードテンプレートに保持するのが理想的です。
ラベルはフィールド定義にあります。fieldDefinition
の前にlabel
を追加する必要があります:
{{ node.field_myfield.fieldDefinition.label }}
これを説明すると、nodeはノードオブジェクトです。コンテンツは、表示モードで構成されたとおりに構築されるフィールドのレンダー配列です。ノードでは、ノードのすべてのフィールドの生の値と定義を見つけます。コンテンツでは、表示モードに含まれているフィールドのみが見つかり、表示モードで構成されているようにすでにフォーマットされています。また、各フィールドはコンテンツ内のオブジェクトとして見つかりますが、フィールドがそこにあるかどうかはわかりません。誰かが後でビューモードからフィールドを削除すると、コードはnull値を取得するためです。
フィールドラベルとフィールド値を個別に印刷できるこのモジュールを作成しました: https://www.drupal.org/sandbox/sutharsan/276318
<strong>{{ content.field_name|field_label }}</strong>: {{ content.field_name|field_value }}
あなたに役立つかどうかをお知らせください。完全なプロジェクトにプロモートします。