لقد تمكنت من نقل جميع محتويات bbPress إلى بيئة التطوير الخاصة بـ Discourse باستخدام سكربت bbpress.rb.
ولكن لدي سؤالان أود المساعدة فيهما:
1: تظهر جميع الصور في Discourse بهذا المسار " /wp-content/uploads/img_644e48aedc2bf.jpg " وهو نفس مسار وسائط bbPress، كيف يمكنني استيراد الصور أيضاً بحيث تنتقل إلى المسار المتوقع في Discourse؟
2: كانت الروابط الدائمة الافتراضية لـ bbPress لدي بهذا الشكل " www.demo.com/%postname%/ "، ويستخدم bbPress أيضاً الروابط الدائمة
" www.demo.com/?p=123 "
في SQL.. سؤالي هو كيف يمكنني تعديل كود bbpress.rb لاستيراد الروابط القديمة وإعادة توجيهها إلى روابط Discourse الجديدة 301 دون أي مشكلة لاحقاً؟
إذن، عندما يحاول المستخدم زيارة الموقع القديم
" www.demo.com/%postname%/ "
، يتم إعادة توجيه الرابط 301 إلى الرابط الجديد
" https://my-discoursexxxx.com/t/1234/%postname% "
هل يمكنك مساعدتي في هذين السؤالين؟
بالنسبة للنقطة 1، ستحتاج إلى تغيير سكربت bbpress لنسخ الصور الرمزية من المجلد، وتحميلها إلى مثيل Discourse الخاص بك. يمكنك التحقق من سكربت استيراد vbulletin للحصول على فكرة حول كيفية تحقيق ذلك، في السطر 212.
أما بالنسبة للنقطة 2، فسيكون ذلك أكثر تعقيدًا بعض الشيء نظرًا لأن Discourse لا يمكنه الوصول إلى بيانات المواقع الخارجية (مثل http://www.demo.com). لذا فإن أفضل طريقة لتحقيق ذلك ستكون الاحتفاظ بنفس النطاق، وإجراء بعض التغييرات الطفيفة على دالة create_permalinks (السطر 379) لدعم معلمة postname.
إذا كنت تقصد المنشورات، فإذا كان لديك خيار “تنزيل الصور البعيدة إلى المحلية” مضبوطًا، فسيقوم Discourse بتنزيلها. هناك مهام Sidekiq يجب أن تعمل للقيام بذلك.
يمكنك البحث عن نصوص برمجية أخرى لـ “Permalink”.
باختصار، يجب تخزين قيم p=123 في TopicCustomFields أو PostCustomFields بالاسم import_id ويمكنك بعد ذلك تشغيل نص برمجي لإنشاء الروابط الدائمة.
قبل بضع دقائق، قمت بتفعيل “تنزيل الصور البعيدة إلى المحلية” وقمت بتنزيل جميع الصور إلى الخادم المحلي “bbPress”. كيف يمكنني تفعيل وظائف sidekiq للسماح لـ Discourse بتنزيلها أثناء الاستيراد؟
أعتذر عن الإزعاج، كيف يمكنني إعادة توجيه جميع الروابط من
تحتاج فقط إلى الانتظار حتى تنتهي. إذا كنت تفضل تعديل البرنامج النصي لجعله يتعامل مع التحميلات عند تشغيله، يمكنك البحث عن برامج نصية أخرى تقوم بذلك.
يمكنك البحث عن برامج نصية أخرى تنشئ روابط دائمة. يحتوي vbulletin.rb على مثال للروابط الدائمة.
البرنامج النصي bbpress.rb الحالي يتعامل مع المرفقات الموجودة في قاعدة البيانات، لذلك يجب أن يكون لديك مستخدمون قاموا بالربط بها مباشرة، أو شيء من هذا القبيل؟ لذا ستحتاج إلى العثور عليها باستخدام تعبير عادي والتعامل معها بالطريقة التي تتعامل بها وظائف التحميل الأخرى. إذا كان Discourse يتعامل معها، فقد تفضل تركه كما هو، حيث أظن أن هذا سيعمل.
لا يمكنك. يوجد على الأقل نص برمجي استيراد واحد سيقوم بتفريغ البيانات حتى تتمكن من ذلك. كما ذكرت سابقًا، من الممكن إنشاء عمليات إعادة توجيه Permalink لحل المشكلة في Discourse.
استيراد الصور من bbPress إلى Discourse،
هذا مثال لبرنامج نصي bbpress.rb.
يقوم بنسخ صور الأفاتار من دليل bbPress وتحميلها إلى مثيل Discourse الخاص بك.
# bbpress.rb
# استيراد صور الأفاتار من bbPress وتحديث صور Discourse
def import_avatars
users.each do |user|
bbpress_avatar_path = "/path/to/bbpress/avatars/#{user['avatar_filename']}"
next unless File.exist?(bbpress_avatar_path)
avatar_upload = File.open(bbpress_avatar_path)
DiscourseAvatar.create_for(user['email'], avatar_upload, override_gravatar: true)
end
end
# استدعاء الدالة
import_avatars
الآن قم بإنشاء دالة create_permalinks لإنشاء عناوين URL المناسبة والتعامل مع عمليات إعادة التوجيه 301.
# bbpress.rb
# إنشاء عناوين URL دائمة مع معلمة postname والتعامل مع عمليات إعادة التوجيه
def create_permalinks
permalinks.each do |permalink|
topic_id = permalink['topic_id']
postname = extract_postname_from_permalink(permalink['url']) # قم بتنفيذ هذه الدالة لاستخراج postname
topic_link = "https://my-discoursexxxx.com/t/#{topic_id}/#{postname}" # قم بتعديل هذا السطر بالبنية الصحيحة لعنوان URL
create_discourse_permalink(topic_id, permalink['url'], topic_link)
create_redirect(permalink['url'], topic_link) # قم بتنفيذ هذه الدالة لإنشاء إعادة توجيه 301
end
end
# استدعاء الدالة
create_permalinks
يجب أن تضيف الدالة create_redirect إعادة توجيه 301 من عنوان URL الدائم القديم لـ bbPress إلى عنوان URL الجديد لـ Discourse.
ملاحظة: استبدل المسار وفقًا لذلك.