Pregunta:
¿Cómo puedo agregar clases a una etiqueta de opción de formulario sin JS? Por el momento, en Form API, puedo pasar una matriz con clave como esta
array(
'0' => 'option 0',
'1' => 'option 1',
)
y obtendré html como este
<option value="0">option 0</option>
<option value="1">option 1</option>
¿Hay alguna manera de hacer algo como esto?
array(
array(
'value' => 0,
'text' => 'option 0',
'class' => 'bob 0',
),
array(
'value' => 1,
'text' => 'option 1',
'class' => 'bob 1',
),
)
y luego obtén esto
<option value="0" class="bob 0">option 0</option>
<option value="1" class="bob 1">option 1</option>
Respuesta:
Desafortunadamente, esto no es muy fácil usando la API de formularios actualmente.
Hay un problema abierto para agregar esta funcionalidad (se remonta a 2008) que teóricamente le permitiría hacer algo como esto:
$form['optiontest'] = array(
'#type' => 'select',
'#title' => t('Option test'),
'#options' => array(
array(
'#return_value' => 0,
'#value' => t('First option'),
'#attributes' => array('class' => 'first', 'title' => t('First option')),
),
array(
'#value' => t('Option group'),
'#attributes' => array('class' => 'group', 'title' => t('This is an optgroup')),
'#options' => array(
array('#return_value' => 2, '#value' => t('1st sub-option')),
array('#return_value' => 4, '#value' => t('2nd sub-option')),
),
),
),
);
Pero, lamentablemente, no hay más que parches fallidos adjuntos al problema en este momento.
La única forma en que puedo pensar en hacerlo en este momento sería agregar una función #process
al elemento de selección y agregar la (s) clase (s) a cada opción cuando se desglosan individualmente.