¿Cómo desactivo una opción en el campo de formulario de selección?
$form['feed'] = array(
'#type' => 'select',
'#title' => t('Display of XML feed items'),
'#options' => array(
'title' => t('Titles only'),
'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.'),
);
¿Cómo puedo desactivar, por ejemplo, la opción "Solo título"?
Respuestas:
La única forma de deshabilitar una de las opciones para un campo de formulario "select" es anular la función theme_select () que implementa hook_theme_registry_alter () .
theme_select()
ejecuta el siguiente código:La función que implemente debería invocar su propia función en lugar de form_select_options () .
Como
theme_select()
se llama para cada campo de selección utilizado en cualquier formulario de Drupal, preferiría considerar implementar hook_form_alter () para eliminar la opción del campo de formulario que desee.fuente
Deshabilitar una opción puede ser difícil de lograr ( Usar form_alter para deshabilitar UNA opción de un campo de selección ), por lo que le recomendaré que busque optgroups como alternativa. La documentación de la API de formulario de Drupal no lo explica, pero la API permite una matriz anidada para las opciones, eche un vistazo a form_select_options () y la
<optgroup>
parte.Puedes escribir este código:
Eche un vistazo a los formularios de Drupal 6 y las matrices de grupos de opt .
Editar : para aclarar esto es una alternativa y no una respuesta directa.
fuente
No sé y no he podido encontrar ninguna forma de desactivar una opción individual. Parece que están tratando de introducir algo como esto en Drupal. Tal vez algunas alternativas, ¿podría lo que quieres hacer con css ?:
O, si no desea que se muestren los valores, puede desarmarlos
fuente
Obtuve el mío trabajando con la siguiente línea
donde 1 es el índice del elemento que no desea que se muestre.
fuente
Convierta el único elemento que desea deshabilitar en un vacío
<optgroup>
.Pros:
hook_form_alter
o directamente al crear su formulario personalizado, no es necesario implementar unatheme_select
función en su tema.Contras:
value='title'
atributo asociado con el original<option>
en el DOM resultante.Implementación:
Los grupos ópticos en Drupal se denotan dentro de la
#options
matriz como cualquierkey => 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
El HTML resultante se verá así:
fuente
Para deshabilitar todo el campo, use
Para deshabilitar una opción en el campo de selección, use
dónde:
['field_name'] es el nombre de su campo
[1] es el índice de la opción en la lista
fuente