it-swarm.com.de

Wie verstecke ich eine Feldgruppe Feldgruppe programmgesteuert in drupal 8?

Ich habe ein Feldgruppe Feldset mit dem Namen group_p_payment als Maschinenname. Ich möchte dies basierend auf dem Benutzer ausblenden. Ich habe den folgenden Code ausprobiert:

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

Aber es hat nicht funktioniert. Wie kann ich das Feldset ausblenden?

4
Crazyrubixfan

Das Feldgruppenmodul speichert gruppierte Felder nicht mehr als Feldmenge in Drupal 8. Es speichert Metadaten für jede Gruppe in einem Array namens #fieldgroups, das in einer Pre-Render-Funktion verwendet wird.

Die Logik des Moduls rendert die Feldmenge nicht, wenn nicht alle untergeordneten Elemente sichtbar sind. Daher können Sie alle untergeordneten Elemente ausblenden, um den gleichen Effekt zu erzielen. Zum Beispiel:

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

Die Logik muss sich ändern, wenn Sie verschachtelte Gruppen haben, aber der Ansatz bleibt der gleiche.

7
Shawn Conn