Я использую Drupal 6 и у меня установлен модуль AJAX. У меня есть следующий код:
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");
}
}
По сути, у меня есть форма для удаления пользователя как производителя в проекте. Пользователь имеет возможность удалить себя. Эта форма позволяет пользователю щелкнуть кнопку, которая, в свою очередь, использует AJAX для отправки формы, удаления роли пользователя в качестве производителя из базы данных и уведомления пользователя об успехе или нет. Он успешно выполняет вызов с использованием AJAX и удаляет роль, как и должен, но в форме по-прежнему отображается кнопка удаления. Если пользователь нажимает кнопку еще раз, это дает ошибку, потому что нечего удалять. Это нормально, я думаю, б / к, это не фатальная ошибка и на самом деле ни на что не влияет ... однако, это не очень приятно для пользователя.
Есть ли способ обновить блок модуля или изменить форму, отображаемую после отправки?
Edit:
Это похоже на хорошее решение, но я не могу заставить его работать. Я включил в свой модуль javascript delete.js:
/**
* 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;
}
Кажется, в эту функцию javascript она никогда не попадет. Как drupal знает, как вызвать эту функцию?