Преобразуйте один элемент, который вы хотите отключить, в пустой <optgroup>
.
Плюсы:
- Это может быть сделано в
hook_form_alter
или непосредственно при создании пользовательской формы, нет необходимости реализовывать theme_select
функцию в вашей теме.
Минусы:
- Нет способа представить
value='title'
атрибут, связанный с оригиналом, <option>
в получающемся DOM.
- YMMV, если вы пытаетесь отключить опцию, которая уже относится к optgroup. Вложенные optgroups могут действительно работать, но это не проверено и не подтверждено.
Реализация:
Optgroups в Drupal обозначаются внутри #options
массива как любые key => value
пары, где само значение является массивом.
Таким образом, из примера в OP мы бы переместили значение, t('Titles only')
чтобы стать, key
и затем сделали бы значение пустым массивом.
$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 будет выглядеть примерно так:
<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>