web-dev-qa-db-ja.com

段落の別のフィールドのテンプレートでフィールド値を取得するにはどうすればよいですか?

2つのフィールドを持つ Paragraphs バンドルがあります。最初のフィールドの値を2番目のフィールドのテンプレートに含めたいので、それを{{ loop.index }}と組み合わせて、グリッドレイアウトの一意のクラスを作成できます。

これは、前処理関数とテーマテンプレートを使用して可能ですか?

2
thejimbirch

非段落フィールドの場合、フィールドテンプレートの変数で使用できるノードオブジェクトがあるため、これをfield.html.twigファイルに配置できます。

{{ element['#object'].machine_name_of_other_field.value }}
4
peezy

これは、段落テンプレートでこれを解決するために思いついた解決策です(paragraph--PARAGRAPH-NAME.html.twig)、しかし、私はまだ前処理を使用するより良い方法があると思います。

{# Renders Grid Style field. #}
{% if content.field_grid_style|render %}
  {% set grid_style = content.field_grid_style['#items'].getString() %}
{% endif %}

{#
  Loops through the Column field here instead of the field template so we can
  set the grid_style class and add the loop index (key + 1)
#}
{% for key, item in content.field_column_content if key|first != '#' %}
  <div class="{{ grid_style }}--{{ key + 1 }}">{{ item }}</div>
{% endfor %}
2
thejimbirch

2番目のフィールドテンプレート内の1つのフィールドをレンダリングするためのソリューションを次に示します。

Hook_preprocess_fieldから最初のフィールド値を取得します。

function teachervision_preprocess_file_field(&$variables) {
  if ($variables['field_name'] == 'second_field_machine_name') {
    $node = \Drupal::routeMatch()->getParameter('node');
    $variables['first_field'] = '';
    if ($node && isset($node->first_field_machine_name->value)) {
      $variables['first_field'] = $node->first_field_machine_name->value;
    }
  }
}

2番目のフィールドのフィールドテンプレート内で、この変数「first_field」を取得して、そのようなことを行うことができます

{% for item in items %}
  <div{{ attributes.addClass(classes, 'field__first_item') }}>{{ first_field }}</div>
  <div{{ attributes.addClass(classes, 'field__second_item') }}>{{ item.content }}</div>
{% endfor %}

それはあなたにとって理にかなっています。

0
Ashish Deynap

私のために働いた別のオプション。 twigテンプレートでview()を有効にします。 this Drupal 8チュートリアル を参照してください:

  • Settings.phpファイルのホワイトリストview
  • {{ element['#object'].machine_name_of_other_field.view }}
0
dsummersl