0

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を使用して正常に呼び出しを行い、本来の役割を削除しますが、フォームにはまだ削除ボタンが表示されています。ユーザーがボタンをもう一度クリックすると、エラー b/c there is nothing to delete が表示されます。これは問題ありません。b/c これは致命的なエラーではなく、実際には何の影響もありませんが、ユーザーにとっては適切ではありません。

モジュールのブロックを更新したり、送信後に表示されるフォームを変更したりする方法はありますか?

編集:

これは良い解決策のように思えますが、うまく機能していないようです。モジュール内に 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 はこの特定の関数を呼び出すことをどのように知っていますか?

4

1 に答える 1

1

AJAX からの戻り値を確認できます。削除が成功した場合はdisplay: none、削除ボタンで実行できます。

AJAX モジュールのドキュメントを見ると、実装する必要があると思いますDrupal.Ajax.plugins.FOO(hook, args)。の場合hook == complete、ボタンを に設定できますdisplay: none

于 2010-01-19T21:10:16.430 に答える