Коли я створюю стандартне поле вибору за допомогою 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
налаштування, друге поле вибору з’являється лише тоді, коли в першому вікні вибору вибрано "Третій")
Ця непослідовність викликає проблеми в ситуації, коли ми формуємо складні динамічні форми з взаємозалежними полями.
Хтось має уявлення, чому поля даються непослідовними варіантами та який найкращий підхід для вирішення проблеми?