Kontrollkästchen: Wie setze ich die Standardwerte oder zeige die benutzerdefinierten Werte mithilfe der Formular-API an? [geschlossen]

7

Ich verwende ein Kontrollkästchen-Element in einem Formular im Modul, das ich für Drupal 7 entwickelt habe. Dies ist mein erster Versuch, ein Modul zu entwickeln und die Formular-API zu verwenden. Ich erstelle eine Liste von Kontrollkästchen, in denen alle Inhaltstypen einer bestimmten Site aufgelistet sind. Ein Array aller Inhaltstypen kann wie folgt abgerufen werden : $nodeTypesRaw=node_type_get_names();. Ein Array mit den Computernamen der Inhaltstypen als Schlüssel und den vom Menschen lesbaren Namen als Werten wird erhalten.

Standardmäßig möchte ich, dass alle Kontrollkästchen aktiviert sind und wann das Formular gesendet wird. Wie erreiche ich das? Die Formular-API-Seiten auf der Drupal-Site sind nicht sehr hilfreich, um die Standardwerte für Kontrollkästchen festzulegen.

$nodeTypesRaw=node_type_get_names();
$nodeMachineNames=array_keys($nodeTypesRaw);
$form['process_comments']['custommod_published_comments_select_node_types']['custommod_published_comments_node_types_checkboxes']=array(
          '#deafult_value'=>$nodeMachineNames,
          '#options'=>$nodeTypesRaw,
          '#type'=>'checkboxes',
);

Ich habe anfangs mit dem obigen Code angefangen, aber es wird nicht funktionieren. Die Liste der Kontrollkästchen wird angezeigt, diese sind jedoch nicht standardmäßig aktiviert. Die Variable wird jedoch beim Senden des Formulars abgerufen (überprüft über drush und var_dump).

bcosynot
quelle
2
Es ist #default_valuenicht #deafult_value. FA nicht AF.
Mołot

Antworten:

16

Von Drupal.org :

$form['element_id'] = array(
  '#type' => 'checkboxes',
  '#options' => array(1 => "One", 2 => "Two", 3 => "Three"),
  '#default_value' => array(1, 3),
);

Der Standardwert wird als Array festgelegt, das die Schlüssel ausgewählter Optionen darstellt.

Wenn Sie sich den Code in Ihrer Frage ansehen, liegt das Problem in der Rechtschreibung. Sie stellen ein, '#deafult_value'wann Sie einstellen möchten '#default_value'.

Mołot
quelle
Ein Array aller Inhaltstypen kann wie folgt abgerufen werden : $nodeTypesRaw=node_type_get_names();. Ein Array mit den Computernamen der Inhaltstypen als Schlüssel und den vom Menschen lesbaren Namen als Werten wird erhalten. Wenn ich den '# default_value` mit der Variablen setze $nodeMachineNames=array_keys($nodeTypesRaw);, bleiben die Kontrollkästchen deaktiviert .
Bcosynot
1
@ vr3690 Nein, Sie haben keinen Standardwert festgelegt. Siehe Kommentar unter Ihrer Frage oder aktualisieren Sie meine Antwort.
Mołot
10

Sie müssen eine Reihe von Option geben Tasten (nicht - Wert) als Standardwert, zB

$options = array(
  'option_1' => t('Option 1'),
  'option_2' => t('Option 2'),
  'option_3' => t('Option 3'),
);

$defaults = array_keys($options);

$form['checkboxes'] = array(
  '#type' => 'checkboxes',
  '#title' => t('Something'),
  '#options' => $options,
  '#default_value' => $defaults,
);
Clive
quelle
Hallo, ich verwende bereits ähnlichen Code. Ich habe meine Antwort bearbeitet und hinzugefügt. Das funktioniert nicht.
Bcosynot
1
Funktioniert gut für mich in einer leeren Installation. #default_valueSind Sie sicher, dass Sie keinen Tippfehler haben, wie @ Mołot vorschlägt
Clive
Ich frage mich nur, hat sich das irgendwann geändert? Weil ich gerade auf form_process_checkboxund form_process_checkboxesvon Drupal 7 schaue und es keinen Mechanismus gibt, der dies zulässt, und natürlich funktioniert es bei mir nicht. github.com/drupal/drupal/blob/7.x/includes/form.inc#L3270-L3351
Łukasz Zaroda
Nicht, dass ich von @ ŁukaszZaroda weiß ... wenn Sie sich user_account_formzum Beispiel ansehen , wird dort dieselbe Methode für die Rollen verwendet
Clive