Select box с подзаголовками

Не все знают, но в Друпале элемент формы Select (выпадающий список) поддерживает группировку опций по подзаголовкам (см. тег OPTGROUP). Причем всего-то надо собирать опции в массиве '#options' в подмассивы:

  t('Arabic') => array(
    'IBM864' => 'IBM864',
    'ISO-885–6' => 'ISO-885–6',
    'WINDOWS-1256' => 'WINDOWS-1256',
  ),
  t('Armenian') => array(
    'ARMSCII-8' => 'ARMSCII-8',
  ),
  t('Baltic') => array(
    'ISO-885–4' => 'ISO-885–4',
    'ISO-885–13' => 'ISO-885–13',
    'WINDOWS-1257' => 'WINDOWS-1257',
  ),
  t('Celtic') => array(
    'ISO-885–14' => 'ISO-885–14',
  ),
  t('Central European') => array(
    'IBM852' => 'IBM852',
    'ISO-885–2' => 'ISO-885–2',
    'MAC-CENTRALEUROPE' => 'MacCE',
    'WINDOWS-1250' => 'WINDOWS-1250',
  ),
  //и т.д.

Тогда получится так:

Было: Стало:
Без группировки С группировкой

Странно, однако, что в Form API об этом — ни слова.

На будущее сохраняю генератор краткого списка кодировок. Пригодится.
Улучшенная версия:


function _get_iconv_encodings() {
  return array(
    t('Arabic') => drupal_map_assoc(array(
      'IBM864',
      'ISO-885–6',
      'WINDOWS-1256',
    )),
    t('Armenian') => drupal_map_assoc(array(
      'ARMSCII-8',
    )),
    t('Baltic') => drupal_map_assoc(array(
      'ISO-885–4',
      'ISO-885–13',
      'WINDOWS-1257',
    )),
    t('Celtic') => drupal_map_assoc(array(
      'ISO-885–14',
    )),
    t('Central European') => drupal_map_assoc(array(
      'IBM852',
      'ISO-885–2',
      'MacCE',
      'WINDOWS-1250',
    )),
    t('Chinese Simplified') => drupal_map_assoc(array(
      'GB18030',
      'GB2312',
      'GBK',
      'ISO-2022-CN',
    )),
    t('Chinese Traditional') => drupal_map_assoc(array(
      'BIG5',
      'BIG5-HKSCS',
      'EUC-TW',
    )),
    t('Cyrillic') => drupal_map_assoc(array(
      'IBM855',
      'ISO-885–5',
      'ISO-IR-111',
      'KOI8-R',
      'MACCYRILLIC',
      'CP866',
      'KOI8-U',
      'MACUKRAINIAN',
      'Windows-1251',
    )),
    t('Greek') => drupal_map_assoc(array(
      'ISO-885–7',
      'WINDOWS-1253',
    )),
    t('Hebrew') => drupal_map_assoc(array(
      'IBM862',
      'ISO-885–8',
      'WINDOWS-1255',
    )),
    t('Japanese') => drupal_map_assoc(array(
      'EUC-JP',
      'ISO-2022-JP',
      'SHIFT_JIS',
    )),
    t('Korean') => drupal_map_assoc(array(
      'EUC-KR',
      'ISO-2022-KR',
      'JOHAB',
    )),
    t('Nordic') => drupal_map_assoc(array(
      'ISO-885–10',
    )),
    t('Romanian') => drupal_map_assoc(array(
      'ISO-885–16',
    )),
    t('South European') => drupal_map_assoc(array(
      'ISO-885–3',
    )),
    t('Thai') => drupal_map_assoc(array(
      'ISO-885–11',
      'TIS-620',
      'WINDOWS-874',
    )),
    t('Turkish') => drupal_map_assoc(array(
      'IBM857',
      'ISO-885–9',
      'WINDOWS-1254',
    )),
    t('Unicode') => drupal_map_assoc(array(
      'UTF16',
      'UTF16BE',
      'UTF16LE',
      'UTF32',
      'UTF32BE',
      'UTF32LE',
      'UTF8',
    )),
    t('Vietnamese') => drupal_map_assoc(array(
      'VISCII',
      'WINDOWS-1258',
    )),
    t('Western') => drupal_map_assoc(array(
      'IBM850',
      'ISO-885–1',
      'ISO-885–15',
      'WINDOWS-1252',
    )),
  );
}

Спасибо, bohart.

Комментарии