Converta o único item que você deseja desativar em vazio <optgroup>
.
Prós:
- Isso pode ser feito de forma
hook_form_alter
direta ou ao criar seu formulário personalizado, não há necessidade de implementar uma theme_select
função no seu tema.
Contras:
- Não há como representar o
value='title'
atributo associado ao original <option>
no DOM resultante.
- YMMV se você estiver tentando desativar uma opção que já pertence a um grupo de opções. Os grupos de opções aninhados podem realmente funcionar, mas isso não foi testado e não foi confirmado.
Implementação:
Os grupos de opções no Drupal são indicados dentro da #options
matriz como quaisquer key => value
pares em que o próprio valor é uma matriz.
Portanto, a partir do exemplo no OP, moveríamos o valor de t('Titles only')
para se tornar o key
e, em seguida, tornar o valor uma matriz vazia.
$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.'),
);
O HTML resultante será mais ou menos assim:
<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>