هذا مفيد جداً فيما يتعلق بالموضوعات مقابل الإضافات، وكذلك فيما يتعلق بالمثال المحدد الذي ذكرته. شكراً لك.
حتى الآن، كان نهجي في إدخال التغييرات يتمثل في فرز تفاصيل كود Discourse (أين يتم تعريف هذا الكائن، وما الذي يتحكم في هذا القالب، وأين يوجد المنطق الذي يتعامل مع هذا الإجراء، إلخ…). لكن هذا كان بطيئاً.
أعتقد أن المسار الأكثر كفاءة على الأرجح هو التركيز على واجهة برمجة التطبيقات (API). بهذه الطريقة، لن أحتاج إلى فرز جميع تفاصيل كود Discourse الناضج، ويمكنني أيضاً التركيز على بناء سمة بدلاً من إضافة - أو ربما مجرد إدخال تغييرات في لوحة تحكم “التخصيص”.
بشكل أساسي، يبدو أن فهم كيفية عمل واجهة برمجة التطبيقات (API) أكثر قابلية للإدارة بكثير من فهم قاعدة كود Discourse.
لنلتزم بالمثال الذي ذكرته: إذا كان المستخدم مشرفاً على فئة معينة، فاسمح لهذا المستخدم بتثبيت المواضيع في صفحة الفئة.
هل يمكنني فعل ذلك دون إضافة؟ دعني أحاول رسم مخطط لذلك:
1. هل المستخدم مشرف على فئة معينة؟
لا أرى حالياً أي شيء في واجهة برمجة التطبيقات (API) يخبرني بما إذا كان المستخدم مشرفاً على فئة معينة. أتوقع أن يكون ذلك موجوداً في استدعاء GET لاسترجاع فئة، لكنني لا أرى مثل هذا الاستدعاء هناك. أو ربما في استدعاء GET لاسترجاع مستخدم، لكنني هناك لا أرى قائمة بالفئات التي يكون فيها المستخدم مشرفاً.
هل يمكنني إضافة هذه البيانات؟
أو، بديلاً عن ذلك، ربما يمكنني إنشاء حقل مخصص (custom_field) للمستخدم أو للفئة لتحديد حالة المشرف، ثم إجراء استدعاء لواجهة برمجة التطبيقات (API) لذلك الحقل المخصص عند تحميل صفحة الفئة.
2. إذا كان المستخدم مشرفاً، اعرض زر التثبيت.
إذا تمكنت من الإجابة على السؤال (1)، فأفترض أنه يمكنني ببساطة إضافة هذا الزر باستخدام جافا سكريبت و CSS في الواجهة الأمامية، وإظهاره إذا كان المستخدم مشرفاً.
3. ينقر المستخدم (المشرف) على الزر، مما يؤدي إلى تثبيت الموضوع
في واجهة برمجة التطبيقات (API)، يبدو أن المواضيع تمتلك سمة “مُثبت” (pinned) (قيمة منطقية boolean). أفترض أن هذا يتوافق مع ما إذا كانت مثبتة في فئتها، حيث يبدو أن كل موضوع ينتمي إلى فئة واحدة فقط.
لذا هنا، عندما يضغط المشرف على زر “تثبيت”، يمكنني على الأرجح تحديث حالة “التثبيت” للموضوع إلى True. إذا لم ينجح ذلك، فقد تكون الحقول المخصصة حلاً هنا أيضاً (على الرغم من أنني لا أرى كيفية إضافة حقول مخصصة إلى موضوع).
لذا، مع هذا، أو شيء مشابه له، يبدو أنه يمكنني إنجاز هذه المهمة باستخدام واجهة برمجة التطبيقات (API) التي، لو قمت بها عبر إضافة، ستتطلب فرزاً كبيراً لملفات قاعدة كود Discourse.
هل يبدو ذلك صحيحاً؟