2つのフィールドを持つ Paragraphs バンドルがあります。最初のフィールドの値を2番目のフィールドのテンプレートに含めたいので、それを{{ loop.index }}
と組み合わせて、グリッドレイアウトの一意のクラスを作成できます。
これは、前処理関数とテーマテンプレートを使用して可能ですか?
非段落フィールドの場合、フィールドテンプレートの変数で使用できるノードオブジェクトがあるため、これをfield.html.twigファイルに配置できます。
{{ element['#object'].machine_name_of_other_field.value }}
これは、段落テンプレートでこれを解決するために思いついた解決策です(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番目のフィールドテンプレート内の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 %}
それはあなたにとって理にかなっています。
私のために働いた別のオプション。 twigテンプレートでview()
を有効にします。 this Drupal 8チュートリアル を参照してください:
view
。{{ element['#object'].machine_name_of_other_field.view }}