Drupal: Как мне изменить форму пользовательского интерфейса после нажатия кнопки «Удалить» с помощью AJAX? - PullRequest
0 голосов
/ 17 января 2010

Я использую 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 знает, как вызвать эту функцию?

1 Ответ

1 голос
/ 20 января 2010

Вы можете проверить возвращаемое значение, поступающее через AJAX, и, если удаление прошло успешно, вы можете сделать display: none для кнопки удаления.

Глядя на документацию по модулю AJAX, я думаю, вам нужно будет реализовать Drupal.Ajax.plugins.FOO(hook, args). Когда hook == complete, вы можете установить кнопку на display: none.

...