عند تشغيل سكربت الاستيراد، ينتج عن ذلك فئتان في Discourse بدون أي مواضيع:
/c/sub-category1
/c/sub-category2
لقد تفحصت منتدى vBulletin آخر ولاحظت أنهم لا يقومون بتضمين الروابط بشكل متداخل. الآن أفترض أن هذا هو التغيير الذي يجب أن أجريه على منتدي قبل أن أتمكن من استخدام السكربت:
يبدو أن هناك شيئًا ما يمنع استيراد المواضيع والمشاركات. أعتقد أنك ستلاحظ وجود أخطاء عند تشغيل العملية. يتم إنشاء المواضيع والمشاركات بعد إنشاء المستخدمين. أعتقد أن إنشاء المواضيع والمشاركات يتم عبر دوال منفصلة. يجب أن يعرض برنامج الاستيراد لك تقدم عملية الاستيراد هذه تمامًا كما فعل مع المستخدمين.
لا توجد رسائل خطأ أثناء الاستيراد — فقط بعض التحذيرات بشأن عناوين بريد إلكتروني غير صالحة للمستخدمين عند تشغيل دالة create_users. ومع ذلك، فإن استيراد المستخدمين ناجح في النهاية. إليك سجل الأحداث (أزلت التحذيرات لأنها تحتوي على عناوين بريد إلكتروني للعملاء):
هنا أعتقد أن النظام يرى فئاتي الخمس فقط كمنشورات ويقوم باستيرادها. ولا يعرف ماذا يفعل بجميع المرفقات للمواضيع الفعلية التي لم يتم استيرادها؟
إخلاء مسؤولية:
في البداية، فشل الاستيراد لأن قاعدة بيانات vBulletin التي تم تسليمها لي لم تكن تحتوي على جدول customprofilepic — لذا أضفت جدولًا فارغًا هناك.
ولم تكن هناك صور رمزية مخصصة — لذا فإن AVATAR_DIR، المشار إليها في نص الاستيراد، هي مجرد مجلد فارغ قمت بإنشائه. قمت بتعليق الأسطر التالية في نص الاستيراد التي كانت تشير إلى هذه الأصول:
يقوم السكربت بجمع جميع المواضيع من جدول node داخل قاعدة بيانات vBulletin. وهو موجود ويحتوي على حوالي 34 ألف منشور. أسماء الأعمدة مطابقة لما يشير إليه السكربت:
يبحث سكريبت الاستيراد عن contenttypeid=23 و contenttypeid=22 لإنشاء المنشورات.
من خلال التصفح السريع لجدول node، يمكنني القول إن 23 تمثل منشورًا مرفقًا به ملف، بينما 22 يجب أن تمثل الملف المرفق نفسه.
معظم المنشورات لها contenttypeid=21 — أي منشورات بدون مرفقات. ولا أرى عملية استيراد مخصصة لها. أم أن ذلك مُغطى بواسطة:
post_count = mysql_query("SELECT COUNT(nodeid) cnt FROM #{DBPREFIX}node WHERE parentid NOT IN (
SELECT nodeid FROM #{DBPREFIX}node WHERE contenttypeid=23 ) AND contenttypeid=22;").first["cnt"]
هذا السكربت يعالج كل ما تبقى بعد انتهاء الاستيراد من 23/22. لكن هناك معرفات أنواع محتوى أخرى غير 23/22/21 — وبالتالي سيتم تضمين تلك أيضًا.
كما يتم استيراد الفئات نسبةً إلى ROOT_NODE الذي تم تعيينه مسبقًا إلى 2. قد أحتاج إلى تغييره إلى 3 لدعم عناوين URL ذات “ثلاث مستويات متداخلة”؟
تحديث: أعيدت تشغيل عملية الاستيراد الآن مع ROOT_NODE=3، ولم يطرأ أي تغيير.
def import_categories
puts "", "importing top level categories..."
categories = mysql_query("SELECT nodeid AS forumid, title, description, displayorder, parentid
FROM #{DBPREFIX}node
WHERE parentid=#{ROOT_NODE}
UNION
SELECT nodeid, title, description, displayorder, parentid
FROM #{DBPREFIX}node
WHERE contenttypeid = 20
AND parentid IN (SELECT nodeid FROM #{DBPREFIX}node WHERE parentid=#{ROOT_NODE})").to_a
على سبيل المثال، تستخدم دالة import_categories القيمة contenttypeid = 23، وهي نفس المعرّف الذي يستخدمه السكربت للمنشورات. أما المعرّف الخاص بالفئات فهو 20. بتغيير هذه القيمة داخل السكربت، تمكّنت أخيراً من رؤية الفئات الفرعية/المواضيع الخاصة بي