it-swarm.com.de

So verbergen und / oder verhindern Sie den Zugriff auf Felder in einem Formular, z. B. group_audience für organische Gruppen

Dies hat mich eine Weile beunruhigt. Wenn ich versuche, Felder wie das Gruppenzielgruppenfeld oder die Veröffentlichungseinstellung aus einem Formular auszublenden, hat das Formular bei der Validierung beide Felder auf einen Nullwert gesetzt, obwohl der Standardwert als wurde korrekt deklariert.

Ich habe versucht, Invisible, #access, unset hidden nichts zu verwenden! Dies ist sehr problematisch, da Benutzer für mein aktuelles Projekt zu diesem Zeitpunkt nur kleine Teile ihres Profils bearbeiten können, z. B. nur die Adresse oder das Bild. Wenn ich also das Gruppenpublikum verstecke, wird der Benutzer aus den Gruppen geworfen, zu denen er gehört bearbeiten.

Am Ende habe ich den folgenden Code verwendet, um diese Felder auszublenden, während der Benutzer weiterhin in seiner Gruppe bleibt.

$variables['user_edit_about']['group_audience']= $temp['group_audience'];       
$variables['user_edit_about']['group_audience']['#prefix'] = '<div style="display:none;">';
$variables['user_edit_about']['group_audience']['#suffix'] = '</div>';

Würde sich jemand einen besseren Weg vorstellen, um dies zu erreichen?

Vielen Dank

9
silkAdmin

Bearbeiten:

Ok, ich habe es herausgefunden. Fügen Sie dies in Ihr benutzerdefiniertes Modul ein:

function example_form_alter(&$form, &$form_state, $form_id) {
    if($form_id == 'story_node_form') {
        $form['title']['#value'] = 'hot stuff';
        $form['title']['#access'] = FALSE;

    }
}

Dadurch wird der Titel des Story-Knotens auf "Hot Stuff" gesetzt und NICHT auf der Seite gerendert, da #access = FALSE;

Sie können mehr granularity control in hook_form_alter () wie hinzufügen

  global $user;

  // Check to see if $user has does not have the administrator role.
  if (!in_array('administrator', array_values($user->roles))) {
    $form['title']['#access'] = FALSE;
  }

Dies funktioniert für Drupal 6 & 7.

Alte Antwort (ignorieren) :

Es ist schon eine Weile her, dass ich so etwas gemacht habe, also kann ich es falsch machen. Wenn Sie das [#value] Eines Formularelements festlegen, wird es im Formular nicht angezeigt.

Ich habe dies in Drupal 6, hook_form_alter() in einem benutzerdefinierten Modul getan. Ich weiß nicht, ob es in Drupal 7 und Ich weiß nicht, ob Sie dies in einer Vorverarbeitungsfunktion tun können

6
iStryker

Sie können dem Formularelement auch einfach die CSS-Klasse 'element-hidden' hinzufügen

$form['user_edit_about']['group_audience']['#attributes']['class'][] = 'element-hidden';

Wie bereits von iStryker erwähnt, ist es weiterhin möglich, den Wert durch DOM-Manipulation zu ändern. Dies ist jedoch eine gute und einfache Möglichkeit, ein Formularfeld (oder ein anderes Renderelement) auszublenden. Das element-hidden Klasse ist definiert in system.base.css.

5
Chaulky