سؤال

لديّ صفحة وحدة Drupal حيث أقوم بتعبئة نموذج مع منسدلة تحتوي على قائمة من الأجزاء المتاحة من مجموعة من الملفات التي يمكن للمستخدم تحميلها. بمجرد تحميل المستخدم ملفًا من نوع معين ، يزيل هذا الخيار من القائمة ، وعندما يتم تحميل جميع الملفات المتاحة ، فلن يتم تقديم النموذج.

المشكلة هي أن Drupal ترسم النموذج قبل تنفيذ الإجراء ، لذلك يبدو للمستخدم أن العملية لم تنجح حتى يعيد تحميل الصفحة.

ما هي الطريقة الشائعة للتعامل مع هذا؟ لا يبدو أن تعيين form_state ['redirect'] للانتقال إلى الصفحة يعمل.

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

المحلول

يمكنك تعديل النموذج الخاص بك بحيث يحفظ بعض المعلومات على حالة النموذج. ثم تقوم بإضافة حالة جديدة إلى بداية وظيفة الإرسال التي تُرجع فورًا إذا لم تنتهي من تحميل جميع الملفات ، وستعيد رسم النموذج.

function modulename_uploader_form(&$form_stuff=null) {
//the function that sets your form array
$stuff = (isset($form_stuff['values'])) ? 
    $form_stuff['storage']['done_uploading'] : 
    false; //if values isnt set, this is the first visit. 
$form_stuff['storage']['done_uploading'] = done_uploading();
.... the rest of your form creation function.


function modulename_uploader_submit($form, &$form_stuff) {
    if($form_stuff['storage']['done_uploading']) {
return;
}
... rest of the function

تأكد من إلغاء ضبط متغير التخزين عند الانتهاء من معالجة النموذج. يمكنك أيضًا Google Multi Page Forms في Drupal.

نصائح أخرى

سيؤدي تعيين $ form_state ['redirect'] في معالج الإرسال الخاص بك إلى إعادة تحميل النموذج ، جديد ، بدون البيانات القديمة. إنها وسيلة لتطهير النموذج بحيث لا تتسكع القيم القديمة كإعدادات افتراضية.

ربما ترغب في استخدام $ form_state ['rebuild'] ، والتي تعطي وظائف بناء النماذج الخاصة بك فرصة لإعادة بناء الهيكل الفعلي للنموذج ، وإضافة المزيد من الحقول أو إزالة الخيارات من الحقول الأخرى بعد تشغيل المعالجات.

منشور المدونة هذا لديه برنامج تعليمي تقريبي في القيام بأشكال متعددة المراحل في D6 ، و دروبال 5 إلى 6 مستندات ترقية على drupal.org تحتوي على نظرة عامة مفيدة على كيفية عمل $ form_state وما هي علاماتها المختلفة.

المشكلة هي أن Drupal ترسم النموذج قبل تنفيذ الإجراء ، لذلك يبدو للمستخدم أن العملية لم تنجح حتى يعيد تحميل الصفحة.

لا أستطيع تصديق ذلك. هل أنت متأكد من ذلك؟

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