Estou tentando usar o ajax para atualizar duas partes diferentes de um formulário drupal a partir de apenas um desfoque de entrada de formulário.
Eu tenho o material padrão do ajax na minha entrada:
$my_form['my_input']['#ajax'] = array(
'callback' => 'my_callback',
'wrapper' => 'my_target_div',
'event' => 'blur',
);
Isso está funcionando bem, trocando minha div quando a entrada é atualizada ... no entanto , também quero atualizar outra entrada de formulário em outro lugar do formulário com código diferente como resultado do desfoque na minha entrada original.
Isso é possível, alguma idéia?
Edit: Para maior clareza, aqui está o meu exemplo do mundo real:
- Tipo de conteúdo 'filme'
- Adicionado campo 'primary_title'
- Quando o 'primary_title' é atualizado, meu retorno de chamada ajax verifica se há strings semelhantes e retorna html.
O html do retorno de chamada é inserido em uma div vazia.
Essa parte está funcionando muito bem!
Também estou tentando modificar a entrada 'title' do nó padrão, fornecendo o valor de 'primary_title' depois de fazer um regex para arrumar a string (removendo "The" ou "A" desde o início, etc.) haverá dois campos de título, um com o título completo 'primary_title' e um 'title' aparado que serão úteis para classificar e exibir registros.
Respostas:
Parece que você pode direcionar diferentes partes de um formulário usando comandos ajax, no entanto, você deve optar por retornar apenas um dos seguintes:
HTML ou
Uma matriz renderizável ou
Uma matriz de comandos AJAX
Na situação sobre a qual escrevi originalmente, estava tentando retornar uma matriz de comandos AJAX e uma matriz renderizável, o que não parece possível.
O código no módulo de exemplos demonstra como direcionar diferentes partes de um formulário usando uma matriz de comandos AJAX:
Neste exemplo de código, #html_div está recebendo $ text e separadamente #html_status está recebendo "Atualizado html_command_example com text = $ text;". data ('r'). ""
Dois locais diferentes em um formulário com duas informações diferentes, desde o retorno de chamada ajax!
Olhando novamente para o que estava trabalhando, percebi que não precisava retornar o campo de título do nó. Será apenas um campo utilitário, usado para classificar dados em listas.
Ocultei o campo no formulário do nó e ele é preenchido na segunda vez em que meu formulário é criado quando meu retorno de chamada ajax original é acionado.
fonte
Eu sou bastante novo no Drupal, mas até agora achei a estrutura do Ajax bastante flexível. Funciona muito bem desde que você o use como pretendido. Portanto, no seu exemplo, se você conhece algum JS, o melhor seria definir esse script como se fosse muito leve.
Boa sorte!
fonte
Outra opção, de drupal.org :
Sua função de retorno de chamada pode ser tão simples quanto:
Isso deve ser chamado a partir de uma
#ajax
matriz em um elemento do formulário (field_whatever
por exemplo, abaixo) definido em umhook_form_FORM_ID_alter()
(ou algum tipo de alter hook de formulário) onde você também testa$form_state
e faz alterações na$form
matriz, como:fonte