it-swarm-id.com

Nonaktifkan opsi untuk bidang formulir pilih

Bagaimana cara menonaktifkan opsi di bidang formulir pilih?

$form['feed'] = array(
  '#type' => 'select', 
  '#title' => t('Display of XML feed items'), 
  '#options' => array(
    'title' => t('Titles only'), 
    'teaser' => t('Titles plus teaser'), 
    'fulltext' => t('Full text'),
  ),
  '#description' => t('Global setting for the length of XML feed items that are output by default.'),
);

Bagaimana saya bisa menonaktifkan, misalnya, opsi "Judul saja"?

9
Miguel Borges

Menonaktifkan opsi mungkin sulit dilakukan ( Menggunakan form_alter untuk menonaktifkan SATU opsi pada bidang pilihan ) jadi saya akan merekomendasikan Anda untuk melihat optgroups sebagai alternatif. The Drupal form API dokumentasi tidak menjelaskannya tetapi API memungkinkan array bersarang untuk opsi, lihat form_select_options () dan <optgroup> bagian.
Anda dapat menulis kode ini:

$form['feed'] = array(
    '#type' => 'select', 
    '#title' => t('Display of XML feed items'), 
    '#options' => array(
        'Titles only' => array(, 
          'teaser' => t('Titles plus teaser'), 
          'fulltext' => t('Full text'),
        ),
        'Titles only 2' => array(, 
          'teaser2' => t('Titles plus teaser 2'), 
          'fulltext2' => t('Full text 2'),
        ),
    ),
    '#description' => t('Global setting for the length of XML feed items that are output by default.'),
);

Lihat Drupal 6 formulir dan array optgroup .

Edit : untuk memperjelas ini adalah alternatif dan bukan jawaban langsung.

6
tostinni

Satu-satunya cara untuk menonaktifkan salah satu opsi untuk bidang formulir "pilih" adalah dengan menimpa theme_select () fungsi yang mengimplementasikan hook_theme_registry_alter () .

theme_select() mengeksekusi kode berikut:

function theme_select($variables) {
  $element = $variables['element'];
  element_set_attributes($element, array('id', 'name', 'size'));
  _form_set_class($element, array('form-select'));

  return '<select' . drupal_attributes($element['#attributes']) . '>' . form_select_options($element) . '</select>';
}

Fungsi yang Anda implementasikan harus menjalankan fungsi Anda sendiri alih-alih form_select_options () .

Karena theme_select() dipanggil untuk setiap bidang pilih yang digunakan dalam sembarang Drupal form, saya lebih suka mempertimbangkan implementasi hook_form_alter () untuk menghapus opsi dari bidang formulir yang Anda inginkan.

6
kiamlaluno

Saya tidak tahu dan belum dapat menemukan cara untuk menonaktifkan opsi individual. Sepertinya mereka mencoba memasukkan sesuatu seperti ini ke Drupal. Mungkin beberapa alternatif, bisakah yang Anda inginkan dilakukan dengan css ?:

$form['feed']['#attributes'] = array('class' => array('options-styles-class'));

Atau, jika Anda tidak ingin nilai ditampilkan sama sekali, Anda dapat menghapusnya

unset($form['feed']['#options']['title']);
3
jordojuice

Saya punya saya bekerja dengan baris berikut

unset($form['field_name']['und']['#options'][1]);

di mana 1 adalah indeks dari item yang Anda tidak ingin ditampilkan.

3
ArchbishopLolly

Konversi satu item yang ingin Anda nonaktifkan menjadi <optgroup> Kosong.

Pro:

  • Ini dapat dilakukan dalam hook_form_alter Atau secara langsung ketika membangun formulir kustom Anda, tidak perlu menerapkan fungsi theme_select Di tema Anda.

Kekurangan:

  • Tidak ada cara untuk mewakili atribut value='title' Yang dikaitkan dengan yang asli <option> Di DOM yang dihasilkan.
  • YMMV jika Anda mencoba menonaktifkan opsi yang sudah berkaitan dengan optgroup. Optgroup bersarang mungkin memang berfungsi, tetapi ini belum diuji dan belum dikonfirmasi.

Implementasi:

Optgroups dalam Drupal dilambangkan di dalam array #options Sebagaimana pasangan key => value Berpasangan di mana nilainya merupakan array.

Jadi dari contoh di OP kita akan memindahkan nilai t('Titles only') menjadi key dan kemudian menjadikan nilainya menjadi array kosong.

$form['feed'] = array(
  '#type' => 'select', 
  '#title' => t('Display of XML feed items'), 
  '#options' => array(
    t('Titles only') => array(), // This one becomes disabled as an empty optgroup
    'teaser' => t('Titles plus teaser'), 
    'fulltext' => t('Full text'),
  ),
  '#description' => t('Global setting for the length of XML feed items that are output by default.'),
);

HTML yang dihasilkan akan terlihat seperti ini:

<form>
  <div>
    <label>Display of XML feed items</label>
    <select>
      <optgroup>Titles only</optgroup>
      <option value="teaser">Titles plus teaser</option>
      <option value="fulltext">Full text</option>
    </select>
  </div>
</form>
0
JamesWilson

Untuk menonaktifkan seluruh bidang, gunakan

$form['field_name']['#disabled']= TRUE;

Untuk menonaktifkan opsi di bidang pilih, gunakan

unset($form['field_name']['und']['#options'][1]);

dimana:

['field_name'] adalah nama bidang Anda

[1] adalah indeks dari opsi dalam daftar

0
Rony Samuel