web-dev-qa-db-ja.com

サブパラグラフを印刷するにはどうすればよいですか?

段落フィールドを持つコンテンツタイプがあります。その段落フィールドには2つの段落フィールドがあり、これをサブ段落と呼びます。

前処理関数で設定されたフラグに応じて、2つのサブ段落のいずれかを印刷したい。

段落:field_banner_header

サブパラグラフ:field_banner_header_single、field_banner_header_multi

小枝:

<div class="callout-options">
    {% if callout_options == 'Single' %}
        {{ content.field_banner_header[0]['#node'].field_banner_header_single.value }}
    {% else %}
        {{ content.field_banner_header[0]['#node'].field_banner_header_multi.value }}
    {% endif %}
</div>

Callout_optionsにブール値( 'Single'または 'Multi')を格納するプリプロセスフックがあります。

function cse_preprocess_node(&$variables) {
  $node = $variables['elements']['#node'];

  if ($node->getType() == 'unit_landing_page') {
    $variables['callout_options'] = $node->get('field_active_callout_tab')->value;
  }
}

ページレンダリングで、次のエラーが発生します。

drupal.js?v = 8.4.6:13キャッチされないクイック編集は、レンダリングされたエンティティフィールドマークアップ([data-quickedit-field-id = "paragraph/426/field_banner/en/default"]を使用)を対応するレンダリングされたエンティティに関連付けることができませんでしたエンティティマークアップ:[data-quickedit-entity-id = "paragraph/426"]の親DOMノードが見つかりません。これは通常、このエンティティタイプのテーマのテンプレートが属性の印刷を忘れていることが原因です。

私は間違っている可能性がありますが、これは私がサブパラグラフを誤って参照していることを教えているようです。

サブパラグラフを印刷するための正しい構文は何ですか?

1
lane

理解した。問題は、ブール値がマークアップとして扱われていたため、次のように条件に['#markup']を追加したことです。

{% if content.field_active_callout_tab.0['#markup'] == 'Single' %}
    {{ content.field_banner_header_single.0 }}
{% else %}
    {{ content.field_banner_header_multi.0 }}
{% endif %}

これを発見するには、ブールフィールド(field_active_callout_tab)をkintモジュールに渡し、その属性を調べます。

1
lane

あなたの前処理機能が鍵であるようです。フィールドの値を取得するには、次の操作を行います。

$callout_tab = $node->get('field_active_callout_tab')->first()->getValue();
$variables['callout_options'] = $callout_tab['value'];

本当に、DevelサブモジュールKintをインストールしてから、最初に何が得られるかを確認してください。

ksm($node->get('field_active_callout_tab')->value);

最も可能性が高いのは、NULLまたは配列です。そう {% if callout_options == 'Single' %}は機能しません。


そして、サブパラグラフに関して、私が得ることができるすべてはエンティティIDでした:

{{ kint(content.field_paragraphs.0['#paragraph'].get('field_subparagraph').value) }}

しかし、多分私は何か間違ったことをしています(そしてあなたはすでにあなた自身でそれを解決しました)。しかし、エンティティIDが本当に最大の場合、プリプロセス関数でサブパラグラフをロードして、boolを渡したようにレンダー配列をTwigに渡すことをお勧めします。理論これはうまくいくはずです:)

1
leymannx