Порожнє значення "- Select -" не відображається для вибраних полів з вимогою станів


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налаштування, друге поле вибору з’являється лише тоді, коли в першому вікні вибору вибрано "Третій")

Ця непослідовність викликає проблеми в ситуації, коли ми формуємо складні динамічні форми з взаємозалежними полями.

Хтось має уявлення, чому поля даються непослідовними варіантами та який найкращий підхід для вирішення проблеми?

Відповіді:


20

Щоб примусити "порожній варіант", призначте його на зразок:

"#empty_option"=>t('- Select -'),

Дякую за відповідь. У мене немає ніде 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')),

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>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.