小枝テンプレートで未加工のフィールド値を取得するにはどうすればよいですか?


27

myfieldはプレーンテキストフィールドです。{{ content.field_myfield }}HTMLマークアップとフィールドラベルでフィールドをレンダリングします。

フィールドの生の値をレンダリングするにはどうすればよいですか?{{ content.field_myfield.value }}動作しません。

回答:


45

{{ entity.field_name.value }} 真の生の値を取得するには、タグとエンコードが含まれます。

  • 例: {{ node.body.value }}
  • 結果: <p>Batman &amp; Robin</p>

{{ content.field_name.0 }} タグとエンコーディングを差し引いた生の値を取得します。

  • 例: {{ content.body.0 }}
  • 結果: Batman & Robin

特にユーザーが入力できるデータを出力している場合、このフィルターは可能な限り避けてください。Drupal 8の自動エスケープの詳細については、このページを参照してください

ソース:フィルター-Twigテンプレートの変数の変更

rawフィルターは値を「安全」とマークします。つまり、自動エスケープが有効になっている環境では、rawが最後に適用されるフィルターである場合、この変数はエスケープされません。

出典:Twigの公式ドキュメント


たとえば、次を使用できます。

{{ node.body.value|striptags }}
{{ paragraph.field_text.value|striptags }}

twigのストリップタグの使用に関する問題は、マークアップではなくhtmlエンティティの二重エンコードであるため、&が&になり、次に&amp;になります。–ベルディール


6
コンテンツの例は正しくありません。drupal.stackexchange.com/questions/198694/…を参照してください。使用できるのはcontent.field_text.0で、フィールドテンプレートなしで最初のフィールドアイテムの内部部分のみを取得します。これは、参照リストに特に便利だというように、あなたはフォーマットされた出力ではなく、生の値を配置したい場所
Berdir

2
より良いが、それでもまったく正しくない。content.field_myfield | striptagsは機能しません。レンダー配列を渡すことはできません。最初にレンダリングし、それを通過させる必要があります。ストリップタグなどにも&やその他の文字に問題があり、2回エンコードされる可能性があるため、実際には| striptags | rawが必要になることがよくあります。
ベルディール

2
| rawはhtmlタグを残して印刷します。この場合、striptagsの問題は、マークアップではなくhtmlエンティティの二重エンコードであるため、&は&amp;になります。そして&amp; amp;
ベルディール

2
これは二重エスケープではありません。それ<を確認でき、>正しく表示されます。アンパサンドは、おそらく出力する前にすでに単一エスケープされています。ただし、質問はプレーンテキストフィールドに関するものであり、テキストフィルターによって処理される書式設定されたテキストフィールドではありません。(誰かが本当にそれを望んでいる場合は、まだになります)(、生の値をこの尋ねない質問に答えるために.value、セキュリティ上の理由から、小枝でエスケープ正しくシングルになりますん出力フォーマットのテキストフィールドフィルタリングされていないため)
4k4

2
はい、これは私が意図したものです(自動エスケープ=シングルエスケープ)。したがって、エンティティフィールドの値を出力する例は、striptagフィルターなしでのみ完璧です。これは、doubleい二重エスケープ出力を生成するためです。(ところで、&amp;あなたの例の出力は間違っています。これは、フィールドの内容がすでに一度エスケープされていない限り、自動エスケープでは発生しません)。
4k4

5

この場合、Twig Field Valueモジュールを使用できます。このモジュールをインストールすると、フィールドレンダー配列から部分データにアクセスできます。例えば

{{ content.field_name|field_value }}
content.field_image|field_target_entity.uri.value

など。プロジェクトページの詳細


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