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.

Foi útil?

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?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top