Título basicamente diz tudo, quero desabilitar uma única caixa de seleção de um tipo de caixa de seleção elemento FAPI.
Não quero fazer isso com JavaScript, nem a alteração de caixas de seleção para vários elementos de caixa de seleção é uma opção, pois o elemento é fornecido por outro módulo.
Pensamentos?
Respostas:
Existe uma maneira limpa no Drupal 7! Aparentemente, por este post , ele ainda não está documentado.
Outro exemplo .
Você também pode definir a função #access como FALSE, para ocultar completamente a caixa de seleção.
fonte
Infelizmente, não há uma maneira realmente limpa de fazer isso na FAPI. Sua melhor aposta - se você estiver determinado - é alterar uma função #process adicional no elemento de caixas de seleção.
A função padrão adicionada aos elementos do tipo 'caixas de seleção' é na verdade uma função ( expand_checkboxes () ) divide o elemento único em vários elementos do tipo 'caixa de seleção' que são posteriormente mesclados novamente em um. Se você pegar carona com sua segunda função de processo, ela poderá acessar o grupo expandido de elementos de 'caixa de seleção' e desativar a que está em questão.
O código a seguir é totalmente não testado, portanto, ressalte o emptor:
fonte
preg_replace()
sobre a saída.Aqui está o meu código para o Drupal 7, para alterar o elemento Roles na página Edit User.
fonte
Estou usando caixas de seleção como "atribuir" e "não atribuir". O cliente solicitou que eu desabilitasse "não atribuir", mas ainda é importante representar "atribuição". Tendo em mente que as caixas de seleção DESABILITADAS são enviadas como "falsas" e, se não forem tratadas adequadamente, serão desassociadas. Aqui está como:
Observe que 'partner_assignments' é sua própria matriz / variável e não será processado como "não atribuído" no meu caso de uso. Obrigado por postar - ele me levou a esta solução.
fonte
D7 Aqui, tivemos que garantir que, ao adicionar um nó, uma certa opção de referência de termo de taxonomia seja sempre desmarcável e sempre será salva no nó. Então, entramos no #after_build e desativamos essa opção, mas tivemos que garantir que, no final, essa opção fosse transmitida. Porque apenas desativá-lo teria parado a viagem dessa opção para futuros ganchos.
É assim que a opção desabilitada se parece:
fonte
Não consegui que a resposta da Eaton funcionasse como escrita (o retorno de chamada #process não retorna nada e é chamado antes que as caixas de seleção sejam expandidas) e também queria que o valor fosse retornado da caixa de seleção desativada (eu queria que ele fosse marcado permanentemente ) Isso funcionou para mim (D6).
Se alguém souber de uma maneira melhor, eu adoraria ouvir!
fonte
Fatal error: Call to undefined function expand_checkboxes()
Aqui está o meu código para o Drupal 7, para alterar o elemento Roles na página Edit User.
fonte
No Drupal 7, para desativar as opções em um select em uma entidade de campo, descobri que precisava instalar uma
#process
função. Infelizmente, isso desativou a função de processo interna, deform_process_checkboxes
modo que precisa ser adicionada novamente (ou chamada a partir da função de processo). Além disso, ao desativar as caixas de seleção já marcadas, descobri que o valor interno callback (form_type_checkboxes_value
) ignora os padrões ao recuperar resultados da entrada.Então algo como isto:
E finalmente:
Não achei que nenhuma das outras respostas nesta página funcionasse nesse caso.
fonte
Aqui está o meu exemplo (usando
#after_build
):Mais a seguinte função de retorno de chamada:
Testado no Drupal 6, mas também deve funcionar no Drupal 7.
Drupal 6
Você pode usar a seguinte função ( fonte ):
fonte
Estou usando este código a seguir no drupal 6: -
e a função de retorno de chamada está aqui: -
/ ** * Processar cada caixa de seleção com base em 'feture' já é usado por um subdomínio ou não. * @param Matriz $ elemento matriz de caixas de seleção de formulário * /
fonte
Uma coisa importante a ser levada em consideração é que as caixas de seleção desabilitadas não são enviadas, portanto, você pode achar que precisa forçar
#value
a caixa de seleção também. Por exemplo:No meu caso, sem isso, o
$form_state['values']
não continha o valor da minha caixa de seleção (que estava ativada por padrão, mas desativada).fonte
Conecte o campo de texto e crie uma caixa de texto dinâmica com informações do banco de dados
1 ° obter o associado. matriz do banco de dados, por exemplo
2 ° Implementos
hook_form_alter()
/ ** * Implementa hook_form_alter (). * ID do formulário = formulário de exibição exposta * /
3 ° campos múltiplos serão verificáveis!
fonte
Se você estiver criando seu próprio formulário, em vez de executar as funções form_alter / # process / # pre_render separadas, basta mudar de 'caixas de seleção' para gerar elementos individuais de 'caixa de seleção'.
'#tree' => TRUE
fornece a mesma estrutura em árvore da versão das caixas de seleção quando a matriz $ form_state ['values'] chega na validação / envio / reconstrução. Se você não puder ou não quiser usar #tree por algum motivo, atribua a cada caixa de seleção uma'#parents' => array('my_element', $key)
propriedade para definir explicitamente sua posição na estrutura de valores.fonte