كيفية استيراد صور bbPress وإعادة توجيه الروابط 301 إلى Discourse؟

أهلاً،

لقد تمكنت من نقل جميع محتويات 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.

إعجاب واحد (1)

إذا كنت تقصد المنشورات، فإذا كان لديك خيار “تنزيل الصور البعيدة إلى المحلية” مضبوطًا، فسيقوم Discourse بتنزيلها. هناك مهام Sidekiq يجب أن تعمل للقيام بذلك.

يمكنك البحث عن نصوص برمجية أخرى لـ “Permalink”.

باختصار، يجب تخزين قيم p=123 في TopicCustomFields أو PostCustomFields بالاسم import_id ويمكنك بعد ذلك تشغيل نص برمجي لإنشاء الروابط الدائمة.

إعجاب واحد (1)

قبل بضع دقائق، قمت بتفعيل “تنزيل الصور البعيدة إلى المحلية” وقمت بتنزيل جميع الصور إلى الخادم المحلي “bbPress”. كيف يمكنني تفعيل وظائف sidekiq للسماح لـ Discourse بتنزيلها أثناء الاستيراد؟

أعتذر عن الإزعاج، كيف يمكنني إعادة توجيه جميع الروابط من

www.old.com/%postname%/

إلى

www.NewDiscourse.com/t/id/%postname%/

لا أعتقد أن %postname%/ هو نفس الشيء

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

يمكنك البحث عن برامج نصية أخرى تنشئ روابط دائمة. يحتوي vbulletin.rb على مثال للروابط الدائمة.

البرنامج النصي bbpress.rb الحالي يتعامل مع المرفقات الموجودة في قاعدة البيانات، لذلك يجب أن يكون لديك مستخدمون قاموا بالربط بها مباشرة، أو شيء من هذا القبيل؟ لذا ستحتاج إلى العثور عليها باستخدام تعبير عادي والتعامل معها بالطريقة التي تتعامل بها وظائف التحميل الأخرى. إذا كان Discourse يتعامل معها، فقد تفضل تركه كما هو، حيث أظن أن هذا سيعمل.

إعجاب واحد (1)

شكراً @pfaffman @nizar9

لقد تمكنت من حفظ ونقل جميع الصور من مقالات bbPress القديمة إلى Discourse عن طريق تمكين ميزة تنزيل الصور البعيدة في لوحة التحكم

ولكن :cry: ما زلت عالقًا في إعادة توجيه 301 للروابط القديمة لـ bbPress مثل هذا

> https://www.demo.com/%postname%

إلى الرابط الجديد

> www.NewDiscourse.com/t/id/%postname%/

ولا يمكنني حل المشكلة من خلال التعبير العادي لـ htaccess لأنني لا أعرف ما هو المعرف الجديد لنفس الموضوع.

لا يمكنك. يوجد على الأقل نص برمجي استيراد واحد سيقوم بتفريغ البيانات حتى تتمكن من ذلك. كما ذكرت سابقًا، من الممكن إنشاء عمليات إعادة توجيه 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.
ملاحظة: استبدل المسار وفقًا لذلك.

آمل أن يعمل.

إعجاب واحد (1)

لن ينجح ذلك مع التحميلات. يمنح Discourse أسماء جديدة لها جميعًا. لم ألاحظ أنهم يريدون إعادة توجيه الصور. لم أر قط شخصًا يطلب ذلك.

قد ينجح ذلك مع بعض المواضيع حيث يستخدم Discourse و bbpress نفس الاسم المستعار عن طريق الصدفة.