Пустое значение «- Выбрать -» не отображается для полей выбора с требованием состояний

8

Когда я создаю стандартное поле выбора, используя API формы Drupal 7, первое значение (также выбранное в новой «пустой форме») <option selected="selected" value="">- Select -</option>. Это значение не указано в определении формы, и я не изменяю форму. (Это хорошо)

Однако, когда я создаю второе поле выбора, которое зависит от первого использования #states, у него нет такого значения по умолчанию. Для сложных форм с несколькими зависимостями это несоответствие является проблемой.

Пример определения формы следующий:

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;
}

В этом простом примере у нас есть 2 поля выбора и кнопка отправки. Два поля выбора отображаются как:

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

(Из-за #statesнастройки второе поле выбора появляется только тогда, когда в первом окне выбора выбрано «Третье»)

Это несоответствие вызывает проблемы в ситуации, когда мы генерируем сложные динамические формы с взаимозависимыми полями.

Кто-нибудь имеет какие-либо идеи, почему поля получают несогласованные параметры и каков наилучший подход к решению проблемы?

adamnfish
источник

Ответы:

20

Чтобы вызвать «пустую опцию», присвойте ей что-то вроде:

"#empty_option"=>t('- Select -'),
doterobcn
источник
Спасибо за ответ. Я нигде не настроил Drupal, чтобы проверить это, поэтому я должен поверить на ваше слово и следить за голосами других!
adamnfish
Это исправление также работает для Drupal 8
Скотт Джудри
2

вам нужно изменить это:

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

выберите : вход

правильный код:

 'visible' => Array(':input[name="first_select"]' => array('value' => '2')),
 'required' => Array(':input[name="first_select"]' => array('value' => '2')),
learningxm
источник
1

Чтобы расширить ответ doterobcn, вы также можете установить пустое значение (ключ) вашего пустого параметра.

В 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',
];

Который даст:

<option value="_none">- None -</option>
romain ni
источник