Drupal - Друпал:Как мне изменить пользовательский интерфейс формы после нажатия кнопки "Удалить" с помощью AJAX?

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

  •  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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top