it-swarm.asia

هل من الممكن إعادة التوجيه بعد "دفع" ملف للمستخدم؟

لقد حصلت على إعداد حيث يقوم الموقع بإنشاء تحليلات داخلية حول استخدام الموقع. يمكن للمستخدمين طلب تنزيل تحليلاتهم الشخصية ، ولأن هذه المعلومات حساسة لا أقوم بإنشاء أي ملفات ، أقوم بإنشاء ملف CSV في متغير ثم "دفعه" للمستخدم باستخدام هذا:

function _cex_download( $output, $filename ) 
{
  header("Pragma: public");
  header("Expires: 0");
  header("Cache-Control: private");
  header("Content-type: application/octet-stream");
  header("Content-Disposition: attachment; filename=$filename");
  header("Accept-Ranges: bytes");
  echo $output;
  exit;
}

يؤدي هذا إلى قيام متصفح المستخدم بفتح مربع حوار "حفظ الملف" ، ويقوم المستخدم بإنشاء الملف من نهايته. يعمل هذا بشكل جيد ، باستثناء أن المسؤولين في الموقع قادرون على تشغيل `` الصادرات المدمرة '' - وفي هذه الحالة لدي نموذج تأكيد ثانوي يحتاج المشرف إلى قبوله قبل تنفيذ عملية التصدير المدمرة.

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

جربت السير في الطريق متعدد الخطوات ، ولكن بعد يوم من تناول الطعام مع عمليات إعادة توجيه غريبة ، تراجعت عن هذا الارتباك. بدأت في النظر إلى منطق نموذج متعدد الخطوات لـ ChaosTool أيضًا. لكن شيئًا ما يخبرني أن المشكلة حقًا هي أن هذا "التنزيل السريع" هو قاتل للعمليات الموجهة.

ربما يكون مربع حوار تأكيد jquery الذي يعترض نقرة زر "التصدير" الأولية ، هل التأكيد بالكامل في جافا سكريبت ، وتنسى امتلاك نموذج تأكيد php/FAPI ، وعندما يؤكد المستخدم في jquery أقوم بإرسال عملية التصدير التي اعترضتها برمجيًا؟

7
Blake Senftner

يبدو أن هناك بعض الحيل ، ولا توجد فكرة عن مدى نجاحها داخل دروبال.

انظر على سبيل المثال http://www.willmaster.com/blog/automation/one-link-download-and-redirect.php

2
Berdir

على حد علمي ، هذا غير ممكن. يمكنك إما إرسال المحتوى (في حالتك ملف) ، أو إعادة التوجيه. ليس كليهما. هذا وجود قيود على بروتوكول HTTP

3
Fuzzy76

أعتقد أن أفضل رهان لك هو إنشاء رمز مميز عند إرسال المستخدم للنموذج ، ثم الحصول على الرمز المميز لتخزين جميع المعلومات اللازمة لإنشاء ملف CSV. اطلب من النموذج إعادة توجيه المستخدم إلى الصفحة المناسبة ، واستخدم drupal_set_message () لتوفير ارتباط يحتوي على الرمز المميز.

عند النقر على الرابط ، يمكن إنشاء ملف CSV وإرساله إلى المستخدم في ذلك الوقت. من المسلم به أن الأمر أكثر تعقيدًا من مجرد إنشائه عند إرسال النموذج ، ولكن كما يقول Fuzzy76 ، فأنت تواجه مشكلة تقييد بروتوكول HTTP. قد يكون القيام بذلك بهذه الطريقة أسهل من محاولة عمل حل قائم على JavaScript.

2
Chris Cohen

هذه هي الطريقة التي حققت بها في Drupal عبر Jquery/JS إجابتي هنا -> لقد حققت ذلك عبر JS ، جيد إجابتي هنا -> https://stackoverflow.com/ أسئلة/822707/php-توليد-ملف-للتنزيل ثم إعادة توجيه/25843144 # 25843144

0
Vaibhav Jain