Не все знают, но в Друпале элемент формы 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.