Drupal: Como faço para modificar a interface do usuário do formulário após o botão 'Remover' pressionado usando o Ajax?
-
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?
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
.