لقد قمنا بترحيل مجتمعنا بنجاح (techenclave.com) من XenForo إلى Discourse.
إجمالي المشاركات: 2.5 مليون
إجمالي المستخدمين: 79 ألف (نشط ومحظور)
إجمالي الرسائل الخاصة: 0.7 مليون
إنه مجتمع عمره 20 عامًا، لذا فقد شهد نصيبه العادل من عمليات الترحيل من Proboards و Vbulletin و IPB و Xenforo والآن Discourse.
استغرق منا 4 أيام لإكمال الترحيل. لكنه تضمن 4 أسابيع من العمل المسبق للترحيل و 4 أسابيع من تطوير الإضافات المخصصة قبله.
شكراً للجميع على المساعدة والتوجيه كلما واجهنا صعوبة. ![]()
بشكل عام، كان ترحيلاً ناجحًا للغاية مع عدم ترك أي بيانات مفيدة تقريبًا.
تم بناء جوهر ترحيلنا على نص برمجي محسّن لاستيراد XenForo، مما يحسن بشكل كبير من النص الأساسي القياسي. لقد استفدنا أيضًا من العديد من النصوص البرمجية الداعمة المتخصصة للتعامل مع تحويلات البيانات المحددة وضمان سلامة البيانات بعد الاستيراد.
التحسينات الرئيسية في نص استيراد XenForo الرئيسي
تحسين الأداء (ترقيم الصفحات بمفتاح): التحسين الأكثر أهمية هو اعتماد ترقيم الصفحات بمفتاح (WHERE id > last_id). هذه الطريقة تحسن سرعة معالجة الدُفعات بشكل كبير مقارنة باستعلامات OFFSET التقليدية، خاصة مع مجموعات البيانات الكبيرة، عن طريق استخدام المفاتيح الأساسية المفهرسة لجلب المجموعة التالية من السجلات.
نقاط فحص واستئناف قوية: تم تنفيذ منطق نقاط فحص متقدم (باستخدام ملفات .json) للمستخدمين والمواضيع والردود والرسائل الخاصة. يتيح ذلك لعملية الاستيراد الاستئناف بأمان من آخر سجل تم استيراده بنجاح بعد الانقطاعات (مثل إعادة تشغيل الخادم، أخطاء النص البرمجي)، مما يوفر وقتًا كبيرًا.
استراتيجية استيراد المشاركات على مرحلتين: يتم الآن استيراد المشاركات على مرحلتين منفصلتين:
المواضيع أولاً: يتم استيراد جميع سلاسل XenForo الأصلية (المشاركات الأولى)، مما يضمن وجود المواضيع الأصلية قبل الردود.
الردود ثانياً: يتم بعد ذلك استيراد المشاركات اللاحقة داخل السلاسل، وربطها بشكل صحيح بمواضيع Discourse التي تم إنشاؤها حديثًا. يقلل هذا النهج المنظم من الردود اليتيمة ويعزز اتساق البيانات.
استيراد شامل للتفاعلات/الإعجابات:
يقوم النص البرمجي الآن بالتمييز بذكاء بين تفاعلات XenForo التي تتطابق مباشرة مع “الإعجابات” الأساسية لـ Discourse (القلوب) وتلك التي هي تفاعلات مخصصة.
إنه يدعم الإدراج المجمع لكل من الإعجابات الأساسية (في جدول post_actions) والتفاعلات المخصصة (بالاستفادة من إضافة discourse-reactions)، مما يسرع العملية بشكل كبير.
يتضمن تعيينًا لأسماء اختصارات رموز تعبيرية لـ XenForo إلى ما يعادلها في Discourse (مثل thumbsup إلى +1، heart_eyes إلى heart).
استيراد بيانات السوق الغنية (إضافة مخصصة):
تمت إضافة قسم مخصص لاستيراد بيانات تفصيلية لقوائم السوق (مثل السعر والموقع والحالة والضمان وخيارات الدفع) من جدول thread_field_value في XenForo.
يتم تخزين هذه البيانات في نموذج TecencMarket::Listing مخصص وفي حقول مخصصة للمواضيع، مما يتيح عرضًا ووظائف أغنى على Discourse.
استيراد ملاحظات السوق (إضافة مخصصة):
تم تقديم وظيفة جديدة لترحيل ملاحظات المستخدم/التقييمات (الإعجابات/عدم الإعجاب) المرتبطة بمعاملات السوق.
تحويل بادئات المواضيع إلى علامات: يقوم النص البرمجي الآن تلقائيًا بتحويل بادئات مواضيع XenForo إلى علامات Discourse. هذا أمر بالغ الأهمية للحفاظ على تنظيم المحتوى وقابليته للاكتشاف، باستخدام إضافة discourse-tagging. كما أنه يقوم بتعيين معرفات البادئات بشكل صحيح إلى عناوين قابلة للقراءة باستخدام جدول العبارات في XenForo.
معالجة محسّنة لمحتوى المشاركات: تلقت هذه الطريقة تحديثات كبيرة لتحويل Markdown بشكل أفضل والتعامل مع BBCode المعقد في XenForo:
تحسين معالجة الاقتباسات: تحويل علامات [QUOTE] في XenForo، بما في ذلك التعامل مع المستخدمين المقتبسين والربط بمشاركات/مواضيع Discourse محددة عند الإمكان.
تضمينات الوسائط المصححة: يضمن أن جميع الوسائط المستوردة (YouTube، Twitter/X) تكون على أسطر منفصلة لتمكين ميزة التضمين/الواحد-بوكسينغ في Discourse، ويحول علامات BBCode القديمة [MEDIA] إلى عناوين URL قياسية.
تحويل الجداول: تحويل BBCode [TABLE] في XenForo إلى جداول Markdown.
معالجة المرفقات (مضمنة ومرفقة): تم إعادة هيكلة منطق معالجة المرفقات. يحاول الآن استبدال علامات [ATTACH] بـ Markdown الصحيح للملف الذي تم تحميله. والأهم من ذلك، أن أي مرفقات لم يتم تمييزها صراحةً بعلامة [ATTACH] في محتوى المشاركة يتم الآن إلحاقها في نهاية المشاركة تحت عنوان واضح “المرفقات:”، مما يضمن عدم فقدان أي ملفات.
تحويل الرموز التعبيرية/الابتسامات: توسيع تعيين الابتسامات في XenForo إلى رموز تعبيرية أصلية في Discourse، مما يحسن الاتساق البصري.
تنظيف BBCode العام: إزالة وتحويل أكثر شمولاً لعلامات BBCode المختلفة (مثل [B]، [I]، [URL]، [IMG]، [LIST]، [CODE]، [COLOR]، [FONT]، [SIZE]، [INDENT]، [USER]).
ترميز الأحرف والتنظيف: يتضمن .scrub! لتسلسلات UTF-8 غير الصالحة و CGI.unescapeHTML لفك ترميز الكيانات HTML بشكل صحيح.
معالجة المستخدمين المعلقين: يتم الآن استيراد مستخدمي XenForo المحظورين كمستخدمين معلقين في Discourse، مع الاحتفاظ بحساباتهم ولكن مع تقييد نشاطهم، مع الاحتفاظ بأسباب الحظر في حقول مخصصة.
استيراد الإشارات المرجعية: استيراد جميع الإشارات المرجعية من XenForo إلى Discourse. لم يكن هناك الكثير منها في البداية.
لم يكن عدد كبير من المستخدمين سعداء بعد الترحيل. وهو أمر متوقع. هذا ليس شيئًا لم تسمعوه من قبل بعد عملية ترحيل. ومع ذلك، سأشارك ملخصًا للملاحظات لاحقًا في هذا الموضوع، قد يكون هناك بعض الأفكار التي يمكن تغذيتها في مستقبل Discourse.

