Como desabilito uma opção no campo de formulário selecionado?
$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.'),
);
Como posso desativar, por exemplo, a opção "Somente título"?
Respostas:
A única maneira de desativar uma das opções para um "select" campo de formulário é para substituir o theme_select () função de execução hook_theme_registry_alter () .
theme_select()
executa o seguinte código:A função que você implementa deve chamar sua própria função em vez de form_select_options () .
Como
theme_select()
é chamado para cada campo de seleção usado em qualquer formulário Drupal, prefiro implementar hook_form_alter () para remover a opção do campo de formulário que você deseja.fonte
Desabilitar uma opção pode ser complicado ( usando form_alter para desativar UMA opção de um campo de seleção ), portanto, recomendamos que você analise os optgroups como uma alternativa. A documentação da API do formulário Drupal não explica, mas a API permite uma matriz aninhada para as opções, consulte form_select_options () e a
<optgroup>
parte.Você pode escrever este código:
Veja os formulários do Drupal 6 e as matrizes do grupo de opções .
Editar : esclarecer que esta é uma alternativa e não uma resposta direta.
fonte
Não sei e não consegui encontrar nenhuma maneira de desativar uma opção individual. Parece que eles estão tentando colocar algo assim no Drupal. Talvez algumas alternativas, o que você quer fazer com css ?:
Ou, se você não deseja que os valores sejam mostrados, você pode desmarcá-los
fonte
Eu tenho o meu trabalhando com a seguinte linha
onde 1 é o índice do item que você não deseja que seja exibido.
fonte
Converta o único item que você deseja desativar em vazio
<optgroup>
.Prós:
hook_form_alter
direta ou ao criar seu formulário personalizado, não há necessidade de implementar umatheme_select
função no seu tema.Contras:
value='title'
atributo associado ao original<option>
no DOM resultante.Implementação:
Os grupos de opções no Drupal são indicados dentro da
#options
matriz como quaisquerkey => 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 okey
e, em seguida, tornar o valor uma matriz vazia.O HTML resultante será mais ou menos assim:
fonte
Para desativar todo o campo, use
Para desativar uma opção no campo de seleção, use
Onde:
['field_name'] é o nome do seu campo
[1] é o índice da opção na lista
fonte