دروبال: كيف يمكنني تعديل زر واجهة المستخدم بعد "إزالة" الضغط باستخدام 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 وحذف الدور كما ينبغي ، ولكن لا يزال النموذج يحتوي على زر إزالة الموضح عليه. إذا انقر المستخدم على الزر مرة أخرى ، فإنه يعطي خطأ B/C لا يوجد شيء للحذف. هذا جيد ، على ما أظن ، 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 هذه. كيف يعرف دروبال أن تسمي هذه الوظيفة المحددة؟

هل كانت مفيدة؟

المحلول

يمكنك التحقق من قيمة الإرجاع القادمة من خلال Ajax وإذا كانت الإزالة ناجحة ، فيمكنك القيام display: none على زر إزالة.

بالنظر إلى وثائق وحدة Ajax ، أعتقد أنك ستحتاج إلى تنفيذها Drupal.Ajax.plugins.FOO(hook, args). متى hook == complete, ، يمكنك ضبط الزر الخاص بك على display: none.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top