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