Eu criei um formulário da web usando a API do formulário. Estou usando a #AJAX
opção de campo para adicionar a validação AJAX a cada campo.
É possível validar e enviar o formulário usando o AJAX sem recarregar a página. Se a validação falhar, quero mostrar uma mensagem de erro e se a validação for bem-sucedida, quero mostrar uma mensagem (de preferência em uma mesa de luz) e redefinir os campos do formulário.
Meu código até agora:
$form['name'] = array(
'#type' => 'textfield',
'#title' => t('Name'),
'#default_value' => '',
'#maxlength' => '128',
'#required' => TRUE,
'#ajax' => array(
'callback' => '_validate_name',
'wrapper' => 'name-error-icon-container',
'method' => 'html',
'effect' => 'none',
'progress' => array(
'message' => NULL,
),
),
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => 'Submit',
'#ajax' => array(
'callback' => '_handle_form_submit',
'effect' => 'fade',
),
);
funções de retorno de chamada são assim:
function _validate_name($form, $form_state) {
if ($form_state['values']['name'] != '') {
$output = 'OK';
}
else {
$output = 'Enter a value';
}
return $output;
}
function _handle_form_submit($form, $form_state) {
}
Mas não tenho certeza do que deve ser _handle_form_submit
válido na função para validar e, em seguida, retornar uma mensagem ou enviar um formulário e redefinir os campos?
Sei que essa pergunta existe há alguns anos, mas não sinto que nenhuma das outras respostas realmente entenda o envio do formulário do Drupal 7 ajax, por isso vou tentar explicá-lo.
Como seu formulário deve funcionar tão bem sem o ajax, conforme as boas práticas, o manipulador de envio do ajax não deve fazer nada além de retornar o formulário. Todo o resto deve estar na sua validação e enviar funções.
fonte
Acho que o post de maxtorete em 17 de outubro de 2011 parece dar um exemplo mais completo usando ambos
form_validate()
eform_submit()
(Ainda não testei.)
Também a resposta de Joshua Stewardson no estouro de pilha tem um bom exemplo de trabalho:
Joshua enfatiza que as mensagens de erro de validação substituem o
#ajax['wrapper']
elemento completamente, para que seu retorno de chamada precise reabastecer esse elemento novamente à medida que você o substitui.fonte
Em geral, a validação e o tratamento de envio de formulários devem ocorrer nos retornos de chamada habituais _validate () e _submit (). A idéia é que os formulários ainda funcionem sem ajax.
A única coisa que os retornos de chamada #ajax devem fazer é retornar a parte do formulário que deve ser substituída, de acordo com o wrapper definido.
fonte
#ajax
função de retorno de chamada no Drupal 7, você retorna apenas a parte do formulário que deseja substituir.Existem duas maneiras
1)
2) Módulo de exemplo http://cgit.drupalcode.org/examples/tree/ajax_example/ajax_example.module?id=refs/heads;id2=7.x-1.x#l402
fonte
No meu caso, o uso de um
submit
tipo fazia com que o formulário sempre fosse enviado, por isso mudei para umbutton
com#ajax
especificado. Então, tive que fazer minha validação no retorno de chamada do ajax.Eu estava fazendo um painel de cadeiras; Não sei se isso funciona.
fonte