Formulário Drupal sendo renderizado antes de enviar a ação
-
19-08-2019 - |
Pergunta
Eu tenho uma página do módulo Drupal, onde estou preenchendo um formulário com uma suspensão que contém uma lista de partes disponíveis de um conjunto de arquivos que o usuário pode fazer upload. Depois que o usuário enviar um arquivo de um determinado tipo, ele remove essa opção da lista e quando todos os arquivos disponíveis forem carregados, o formulário não será renderizado.
O problema é que o Drupal está desenhando o formulário antes de realizar a ação de envio, por isso parece ao usuário que a operação não funcionou até que eles recarregem a página.
Qual é a maneira comum de lidar com isso? Configurar form_state ['redirecion'] para ir para a página não parece funcionar.
Solução
Você modifica seu formulário para salvar algumas informações sobre o estado do formulário. Em seguida, você adiciona um novo caso ao início da função de envio que retorna imediatamente se você não for feito o upload de todos os arquivos, e isso redesenhará o formulário.
function modulename_uploader_form(&$form_stuff=null) {
//the function that sets your form array
$stuff = (isset($form_stuff['values'])) ?
$form_stuff['storage']['done_uploading'] :
false; //if values isnt set, this is the first visit.
$form_stuff['storage']['done_uploading'] = done_uploading();
.... the rest of your form creation function.
function modulename_uploader_submit($form, &$form_stuff) {
if($form_stuff['storage']['done_uploading']) {
return;
}
... rest of the function
Certifique -se de desativar a variável de armazenamento quando terminar o processamento do formulário. Você também pode pesquisar no Google Formulários Multi Page no Drupal.
Outras dicas
Definir $ form_state ['redirecion'] no seu manipulador de envio fará com que o formulário recarregue, fresco, sem os dados antigos. É uma maneira de limpar o formulário para que valores antigos não permaneçam como padrões.
Você provavelmente deseja usar $ form_state ['reconstrução'], o que oferece às suas funções de construção de formulários uma oportunidade de reconstruir a estrutura real do formulário, adicionando mais campos ou removendo opções de outros campos após a execução dos manipuladores de envio do formulário.
Esta postagem do blog tem um tutorial aproximado sobre como fazer formas de vários estágios em D6, e o Drupal 5 a 6 Atualizar documentos No Drupal.org, contém uma visão geral útil de como o $ form_state funciona e para que servem seus vários sinalizadores.
O problema é que o Drupal está desenhando o formulário antes de realizar a ação de envio, por isso parece ao usuário que a operação não funcionou até que eles recarregem a página.
Eu não posso acreditar nisso. Tem certeza disso?