Eu criei um tipo de conteúdo chamado "menu principal". Tenho poucas listas de seleção que dependem umas das outras. Eu queria exibir uma lista diferente quando caixas de seleção diferentes são selecionadas. Eu descobri que preciso usar o Ajax para editar o formulário para conseguir isso, mas alguém pode me dizer como usar o Ajax com hook_form_alter?
O ID do formulário que devo editar é "main_menu_node_form". Quando tento acessar esse formulário usando hook_form_alter()
e adiciono a #ajax
propriedade dos campos do formulário, parece que não consigo fazer isso, pois os campos já são renderizados antes da passagem do identificador hook_form_alter()
. Alguém por favor pode me ajudar a resolver isso?
Nota: Criei o tipo de conteúdo usando hook_install()
.
function main_menu_content_type_form_main_menu_node_form_alter(&$form, &$form_state, $form_id) {
dpm($form);
dpm($form_state);
$form['field_mlnk'] = array(
'#ajax' => array(
'callback' => 'main_menu_content_type_form_main_menu_node_form_alter_callback',
'wrapper' => 'link-div',
'method' => 'replace',
'effect' => 'fade',
),
);
}
hook_form_alter()
(como você escreveu: "Quando eu tento acessar este formulário usando o formulário alter [… [...]").main_menu_content_type_form_main_menu_node_form_alter_callback()
; se essa função contiver código incorreto, os usuários não poderão relatar nenhuma alteração que você deva fazer no seu código para fazê-lo funcionar.Respostas:
Eu seria capaz de fornecer algumas informações detalhadas sobre o que você está fazendo de errado com hook_form_alter se você incluísse algum código real do seu módulo personalizado. No entanto, como você não fornece detalhes específicos, assista ao vídeo: Como criar belos formulários no Drupal 7 (observe que eu inseri a URL para que ela comece no momento em que o ajax é descrito). Aproximadamente 5 minutos assistindo a isso provavelmente fornecerão a resposta para sua pergunta (já que descreve exatamente como usar o ajax com hook_form_alter), mas se você estiver realmente impaciente, o código real será mostrado em algum lugar por aqui .
Se você deseja ver um exemplo ao vivo, bem testado e documentado, de um formulário sendo alterado usando ajax, existe um no módulo Exemplos . Você pode encontrar o gancho real aqui e a função de retorno de chamada aqui .
Eu espero que isso ajude. Caso contrário, forneça mais informações sobre seu código e poderemos dizer exatamente o que você está fazendo de errado.
fonte