Convierta el único elemento que desea deshabilitar en un vacío <optgroup>
.
Pros:
- Esto se puede hacer en
hook_form_alter
o directamente al crear su formulario personalizado, no es necesario implementar una theme_select
función en su tema.
Contras:
- No hay forma de representar el
value='title'
atributo asociado con el original <option>
en el DOM resultante.
- YMMV si está intentando deshabilitar una opción que ya pertenece a un grupo opt. Los grupos opcionales anidados podrían funcionar, pero esto no se ha probado ni confirmado.
Implementación:
Los grupos ópticos en Drupal se denotan dentro de la #options
matriz como cualquier key => value
par donde el valor es en sí mismo una matriz.
Entonces, a partir del ejemplo en el OP, moveríamos el valor de para convertirse en el y luego haríamos que el valor sea una matriz vacía.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.'),
);
El HTML resultante se verá así:
<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>