Drupal: Como faço para modificar a interface do usuário do formulário após o botão 'Remover' pressionado usando o Ajax?

StackOverflow https://stackoverflow.com/questions/2082591

  •  21-09-2019
  •  | 
  •  

Pergunta

Estou usando o Drupal 6 e tenho o módulo Ajax instalado. Eu tenho o seguinte código:

function remove_manufacturer_role_form($form_state) {
  $form['#ajax'] = array(
    'enabled' => TRUE
  );
  $form['hidden'] = array('#type' => 'value', '#value' => 'is_it_here');
  $form['submit'] = array('#type' => 'submit', '#value' => t('Remove yourself as manufacturer'));
  return $form;
}

function remove_manufacturer_role_form_submit($form, &$form_state) {
     $current_vars = ogrolerequestmanufacturerblock_get_current_vars();

     if( $current_vars )
     {
    $curr_gid = $current_vars['current_gid'];
    $curr_uid = $current_vars['current_user_id'];
    $delete_query = "DELETE FROM {og_users_roles} WHERE rid in (SELECT rid FROM {role} WHERE name='Manufacturer') AND uid=$curr_uid AND gid=$curr_gid";
    if( db_query($delete_query) )
        drupal_set_message("You successfully removed yourself as a manufacturer from this project");
     }
}

Basicamente, tenho um formulário para remover um usuário como fabricante em um projeto. O usuário tem a capacidade de se remover. Este formulário permite ao usuário clicar em um botão, que por sua vez usa o AJAX para enviar o formulário, excluir a função do usuário como fabricante do banco de dados e notificar o usuário se ele foi bem -sucedido ou não. Ele faz com que a chamada usando o Ajax e exclui a função como deveria, mas o formulário ainda possui o botão Remover mostrado nele. Se o usuário clicar no botão novamente, ele fornecer um erro b/c, não haverá nada a excluir. Tudo bem, eu acho, b/c não é um erro fatal e realmente não afeta nada ... no entanto, não é bonito para o usuário.

Existe uma maneira de atualizar o bloco do módulo ou modificar o formulário que é mostrado depois de enviar?

Editar:

Parece uma boa solução, mas não consigo fazer funcionar. Incluí o javascript delete.js no meu módulo:

/**
 * Ajax Forms plugin for ogrolerequestmanufacturerblock 
 *
 * @param {String} hook
 * @param {Object} args
 * @return {Bool}
 */

Drupal.Ajax.plugins.ogrolerequestmanufacturerblock = function(hook, args) {
alert('it got into javascript!');
    if (hook === 'submit') {
        alert('submit called within javascript!');
    }
    return true;
}

Parece nunca entrar nessa função JavaScript. Como o Drupal sabe chamar essa função específica?

Foi útil?

Solução

Você pode verificar o valor de retorno que vem através do Ajax e, se a remoção tiver sido bem -sucedida, você pode fazer um display: none no botão Remover.

Olhando para a documentação do módulo Ajax, acho que você precisará implementar Drupal.Ajax.plugins.FOO(hook, args). Quando hook == complete, você pode definir seu botão para display: none.

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