Drupal: Come faccio a modificare forma ui dopo il tasto 'Cancella' premuto utilizzando AJAX?
-
21-09-2019 - |
Domanda
Sto usando Drupal 6 e avere il modulo AJAX installato. Ho il seguente codice:
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");
}
}
In sostanza, ho un modulo per rimuovere un utente come produttore all'interno di un progetto. L'utente ha la possibilità di rimuovere se stessi. Questo modulo consente all'utente di fare clic su un pulsante, che a sua volta utilizza AJAX per inviare il modulo, eliminare il ruolo dell'utente come produttore dal database, e notificare all'utente se ha avuto successo o meno. Si rende con successo la chiamata utilizzando AJAX e cancella il ruolo come dovrebbe, ma la forma è ancora il pulsante di rimozione mostrato su di esso. Se l'utente fa clic di nuovo il tasto dà un errore b / c non c'è nulla da eliminare. Questo va bene, immagino, b / c non è un errore fatale e in realtà non pregiudica nulla ... però, non è abbastanza per l'utente.
C'è un modo per rinfrescare blocco del modulo o modificare il modulo che viene visualizzato una volta che è stata presentata?
Modifica
Questa sembra una buona soluzione, ma io non riesco a sembrare per farlo funzionare. Ho incluso le delete.js javascript nel mio modulo:
/**
* 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;
}
E non sembra mai entrare in questa funzione javascript. Come fa sapere drupal chiamare questa funzione specifica?
Soluzione
È possibile controllare il valore di ritorno che passa AJAX e se la rimozione ha avuto successo, si può fare un display: none
sul pulsante Rimuovi.
Guardando la documentazione del modulo AJAX, penso che sarà necessario implementare Drupal.Ajax.plugins.FOO(hook, args)
. Quando hook == complete
, è possibile impostare il pulsante per display: none
.