Drupal - Друпал:Как мне изменить пользовательский интерфейс формы после нажатия кнопки "Удалить" с помощью AJAX?
-
21-09-2019 - |
Вопрос
Я использую 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 и удаляет роль, как и должно быть, но в форме по-прежнему отображается кнопка удаления.Если пользователь нажимает на кнопку еще раз, это выдает ошибку, потому что удалять нечего.Я думаю, это нормально, потому что это не фатальная ошибка и на самом деле ни на что не влияет ...однако это некрасиво для пользователя.
Есть ли способ, которым я могу обновить блок модуля или изменить форму, которая отображается после его отправки?
Редактировать:
Это кажется хорошим решением, но, похоже, я не совсем могу заставить его работать.Я включил delete.js javascript в свой модуль:
/**
* 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 узнает, что нужно вызвать эту конкретную функцию?
Решение
Вы можете проверить возвращаемое значение, поступающее через AJAX, и, если удаление прошло успешно, вы можете выполнить display: none
нажмите на кнопку удалить.
Глядя на документацию модуля AJAX, я думаю, вам нужно будет реализовать Drupal.Ajax.plugins.FOO(hook, args)
.Когда hook == complete
, вы можете установить свою кнопку на display: none
.