Der leere Wert "- Auswählen -" wird für Auswahlfelder mit Statusanforderung nicht angezeigt

8

Wenn ich mit der Drupal 7-Formular-API ein Standardauswahlfeld erstelle, ist der erste Wert (auch der, der in einem neuen "leeren Formular" ausgewählt wurde) <option selected="selected" value="">- Select -</option>. Dieser Wert ist in der Formulardefinition nicht angegeben und ich ändere kein Formular. (Das ist okay)

Wenn ich jedoch ein zweites Auswahlfeld erstelle, das von der ersten Verwendung abhängt #states, hat es keinen solchen Standardwert. Bei komplexen Formularen mit mehreren Abhängigkeiten ist diese Inkonsistenz ein Problem.

Eine beispielhafte Formulardefinition lautet wie folgt:

function sb_quickquote_test_form($form, &$form_state, $post=array()) {

  $fields['first_select'] = array(
    '#type'             => 'select',
    '#title'            => 'First select box',
    '#options'          => Array('First', 'Second', 'Third'),
    '#required'         => TRUE,
  );

  $fields['dependent_delect'] = array(
    '#type'             => 'select',
    '#title'            => 'Dependent select box',
    '#options'          => Array('Something', 'Another thing', 'Something else', 'Final thing'),
    '#states'           => Array(
      'visible' => Array('select[name=first_select]' => array('value' => '2')),
      'required' => Array('select[name=first_select]' => array('value' => '2')),
    ),
  );

  $fields['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Submit'),
  );
  return $fields;
}

In diesem einfachen Beispiel haben wir 2 Auswahlfelder und eine Senden-Schaltfläche. Die beiden Auswahlfelder werden wie folgt angezeigt:

 ______________      ________________
| - Select - |v|    | Something    |v|
`--------------'    `----------------'
| - Select -   |    | Something      | <- no empty option
| First        |    | Another thing  |
| Second       |    | Something else |
| Third        |    | Final thing    |
 --------------      ----------------

(Aufgrund der #statesEinstellung wird das zweite Auswahlfeld nur angezeigt, wenn im ersten Auswahlfeld "Drittes" ausgewählt ist.)

Diese Inkonsistenz verursacht Probleme in einer Situation, in der wir komplexe dynamische Formen mit voneinander abhängigen Feldern erzeugen.

Hat jemand eine Idee, warum die Felder inkonsistente Optionen erhalten und was der beste Ansatz ist, um das Problem zu umgehen?

Adamnfish
quelle

Antworten:

20

Um die "leere Option" zu erzwingen, weisen Sie ihr Folgendes zu:

"#empty_option"=>t('- Select -'),
doterobcn
quelle
Danke für die Antwort. Ich habe Drupal nirgendwo eingerichtet, um dies zu überprüfen, also muss ich Ihr Wort dafür nehmen und die Stimmen anderer im Auge behalten!
Adamnfish
Dieser Fix funktioniert auch für Drupal 8
Scott Joudry
2

Sie müssen dies ändern:

 'visible' => Array('select[name=first_select]' => array('value' => '2')),
 'required' => Array('select[name=first_select]' => array('value' => '2')),

Wählen Sie: : Eingabe

Der richtige Code lautet:

 'visible' => Array(':input[name="first_select"]' => array('value' => '2')),
 'required' => Array(':input[name="first_select"]' => array('value' => '2')),
learningxm
quelle
1

Um die doterobcn-Antwort zu erweitern, können Sie auch den leeren Wert (den Schlüssel) Ihrer leeren Option festlegen.

In Drupal 8:

$form['country'] = [
  '#type' => 'select',
  '#multiple' => FALSE,
  '#title' => t('Country:'),
  '#required' => FALSE,
  '#options' => $countries,
  '#default_value' => 'FR',
  '#empty_option' => t('- None -'),
  '#empty_value' => '_none',
];

Welches wird geben:

<option value="_none">- None -</option>
romain ni
quelle