web-dev-qa-db-ja.com

drupal 8でプログラムによってフィールドグループフィールドセットを非表示にする方法は?

フィールドグループ フィールドセットgroup_p_paymentをマシン名として。これをユーザーに基づいて非表示にしたい。私は次のコードを試しました:

        $user = \Drupal::currentUser()->getRoles();
        if(!in_array("Administrator", $user) ||  !in_array("administer", $user)) {
         $form['group_p_payment']['#access'] = FALSE;
        }

しかし、うまくいきませんでした。フィールドセットを非表示にするにはどうすればよいですか?

4
Crazyrubixfan

フィールドグループモジュールは、グループ化されたフィールドをフィールドセットとしてDrupal 8に保存しなくなりました。これは、プリレンダリング関数で使用される#fieldgroupsという配列に各グループのメタデータを保存します。

すべての子要素が表示されていない場合、モジュールのロジックはフィールドセットをレンダリングしません。したがって、すべての子要素を非表示にして、同じ効果を得ることができます。例えば:

foreach ($form['#fieldgroups']['group_p_payment']->children as $form_element_id) {
  $form[$form_element_id]['#access'] = FALSE;
}

ネストされたグループがある場合、ロジックは変更する必要がありますが、アプローチは同じままです。

7
Shawn Conn