Durum gereksinimi olan belirli alanlar için “- Seç -” boş değeri görünmüyor


8

Drupal 7 form API'sini kullanarak standart bir seçim kutusu oluşturduğumda, ilk değer (ayrıca yeni bir 'boş formda seçilen değer)' dir <option selected="selected" value="">- Select -</option>. Bu değer form tanımında belirtilmemiş ve hiçbir form değişikliği yapmıyorum. (Bu iyi)

Ancak, ilk kullanıma bağlı ikinci bir seçim kutusu oluşturduğumda #states, böyle bir varsayılan değere sahip değil. Birden fazla bağımlılığı olan karmaşık formlar için bu tutarsızlık bir sorundur.

Örnek bir form tanımı aşağıdaki gibidir:

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

Bu basit örnekte, 2 seçim kutusu ve bir gönderme düğmesi var. İki seçim kutusu şu şekilde görüntülenir:

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

( #statesAyar nedeniyle , ikinci seçim kutusu yalnızca ilk seçim kutusu "Üçüncü" seçili olduğunda görünür)

Bu tutarsızlık, birbirine bağımlı alanlarla karmaşık dinamik formlar ürettiğimiz bir durumda sorunlara neden oluyor.

Alanlara neden tutarsız seçenekler verildiği ve sorunun çözümü için en iyi yaklaşımın hangisi olduğu hakkında bir fikri olan var mı?

Yanıtlar:


20

"Boş seçeneği" zorlamak için aşağıdaki gibi bir şey atayın:

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

Cevap için teşekkürler. Drupal'ın bunu kontrol etmek için hiçbir yere ayarlamamı sağladım, bu yüzden sözünüzü almalı ve başkalarının oylarına göz kulak olmalıyım!
adamnfish

Bu düzeltme, Drupal 8
Scott Joudry

2

Bunu değiştirmeniz gerekiyor:

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

giriş yapmak için seçin

doğru kod:

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

1

Doterobcn yanıtını genişletmek için boş seçeneğinizin boş değerini (anahtar) da ayarlayabilirsiniz.

Drupal 8'de:

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

Hangi verecek:

<option value="_none">- None -</option>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.