Como usar o Ajax na forma alter no Drupal 7?

8

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 #ajaxpropriedade 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',
    ),
  );
}
Drupal Developer
fonte
11
Seria útil ver o código do formulário que você está tentando alterar e o código que você está usando para alterá-lo.
Kiamlaluno
@kiamlaluno Criei um tipo de conteúdo main_menu usando a função hook_install. Eu queria exibir campos enquanto adicionava conteúdo de acordo com a seleção feita nas listas. Devo adicionar as propriedades do ajax em hook_install ou em Hook_form_alter.
Drupal Developer
Ainda assim, seria útil ver o código para o qual você está usando hook_form_alter()(como você escreveu: "Quando eu tento acessar este formulário usando o formulário alter [… [...]").
Kiamlaluno
@kiamlaluno Adicionei o snippet de código à minha pergunta. Por favor, veja isso e me diga se o código funciona ou não.
Drupal Developer
Seria perfeito se você mostrasse também o código para 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.
Kiamlaluno

Respostas:

7

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.

F1234k
fonte
@ F123K Queria alterar os campos existentes no formulário, em vez de adicionar um novo campo ao formulário. Então, por favor me diga como isso pode ser feito.
Drupal Developer
Postagem editada com um gancho de amostra e a função de retorno de chamada.
F1234k