مهارات إنشاء السمات والكتل

مستودع لمهارات Claude Code لبناء سمات Discourse ومكونات الكتل:

:toolbox: ما الذي تتضمنه

مهارة تأليف السمات — تغطي نطاقًا شاملاً لبناء سمة Discourse: التهيئ باستخدام أداة سطر الأوامر discourse_theme، وهيكلة SCSS، ومكتبة عرض الصفحة، والتوطين، والإعدادات، والمعدلات، ومحوّلات القيم، والأيقونات، ومتغيرات CSS. تتضمن ملفات مرجعية مفصلة للأيقونات والمتغيرات والمحوّلات يتم تحميلها حسب الحاجة. SKILL.md

مهارة تأليف الكتل — تغطي جانب السمات في واجهة برمجة التطبيقات للكتل: كتابة مكونات الكتل باستخدام الزينة @block، وتحديد مخططات الوسائط (args schemas)، وعرض الكتل في المنافذ الأساسية المتاحة، والشروط، وكتل الحاويات وتجميع التخطيط، ودمج ترجمات السمة وإعداداتها في وسائط الكتل. SKILL.md

سمة مثال — سمة عاملة تحتوي على صفحة رئيسية مخصصة مبنية بالكتل، توضح الأنماط الحقيقية للمنافذ والشروط وتكوين التخطيط.


:jigsaw: حول واجهة برمجة التطبيقات للكتل

واجهة برمجة التطبيقات للكتل هي الإطار الجديد في Discourse لبناء مكونات واجهة مستخدم معيارية وقابلة للتكوين في السمات والإضافات. الكتل هي مكونات Glimmer مسجلة في منافذ ذات أسماء محددة — مثل homepage-blocks أو hero-blocks أو sidebar-discovery — ويمكن عرضها شرطيًا بناءً على المسار أو المستخدم أو عرض الصفحة أو إعدادات الموقع أو توفر الإضافة.

تتمثل إحدى نقاط القوة الرئيسية في هذا النظام في أن الكتل ذات نطاق صغير ومركّز وأنماطها متسقة. وهذا يجعلها مناسبة جدًا للتطوير بمساعدة الذكاء الاصطناعي: يمكن للنموذج الذي يمتلك مهارة الكتل تهيئة مكون كتلة يعمل، وتسجيله في منفذ، وربط الشروط في خطوة واحدة.

تُظهر سمة المثال في هذا المستودع صفحة رئيسية تتكيف بناءً على الإضافات والمحتوى المتاح. إليك مظهر الصفحة الرئيسية الأساسية، مع كتلة بطلة وقائمة المواضيع المميزة:

عند استيفاء شروط إضافية (تم تكوين علامة مميزة، وإضافة Discourse Events نشطة، وإضافة Discourse Leaderboard متاحة)، يتم عرض كتل إضافية بشكل شرطي في التخطيط:

لا تقتصر الكتل على الصفحة الرئيسية فقط. تستخدم سمة المثال أيضًا منفذ sidebar-blocks لإضافة رابط الرئيسية، ومنفذ sidebar-discovery لإضافة محتوى جانبي خاص بكل فئة، وكتلة category-banner في أعلى صفحات الفئات:

يُظهر مستكشف الكتل في DevTools تسميات المنافذ ومعرفات الكتل مُطبّقة على الصفحة. وهذا يسهّل فهم هيكل التخطيط وتصحيح الأخطاء المتعلقة بمكان عرض كل عنصر:


:art: الاستخدام مع منصة تصميم MCP

تعمل المهارات بشكل ممتاز مع منصات تصميم MCP (مثل Penpot أو Figma MCP). عند توصيل واحدة، يمكن لـ Claude قراءة مواصفات المكونات ورموز التصميم مباشرة من ملفات التصميم الخاصة بك وتنفيذها باستخدام تقاليد المهارة. إنها حلقة أكثر إحكاما بين التصميم والرمز، خاصة عند العمل من نظام تصميم منظم.


:fork_and_knife: انسخ وعدّل

بعض التقاليد في المهارات هي تفضيلات شخصية أكثر منها تقاليد راسخة، مثل هيكلية مجلدات SCSS. يمكنك نسخ المستودع وتعديل المهارات لتناسب سير عملك وتقاليديك الخاصة.


:speech_balloon: شارك ما تبنيه

جرّبها وأخبرنا كيف سارت الأمور! نود جدًا معرفة كيف تستخدم المهارات، وما الذي بنيته بها، وأين تقصر. التعليقات والتصحيحات والنسخ المنسوخة جميعها موضع ترحيب.

هل سيكون هناك موضوع مخصص للكتل أم أن هذا هو؟

إذا كان الأمر كذلك، فهل يمكن أن تساعد بعض مقتطفات الكود؟ أم أن ما ورد في ملف plugin-api.gjs هو التوثيق الحالي؟

شكرًا لك.

سيظل هناك توثيق يغطي واجهة برمجة تطبيقات Blocks بالكامل، بما في ذلك التنفيذ في النواة والإضافات. بالنسبة للتصميم باستخدام Blocks، يجب أن يغطي ملف SKILL.md بالفعل جميع الجوانب ذات الصلة. إنه موجز وسهل القراءة للغاية.

يتضمن قالب التصميم المرفق ملفات التهيئة الأولية وكتل Blocks. تعلن ملفات التهيئة الأولية عن التخطيط لكل BlockOutlet: discourse-theme-skills/javascripts/discourse/api-initializers at main · discourse/discourse-theme-skills · GitHub.

أستمتع حقًا بهذا :winking_face_with_tongue: … مثل أدوات تصميم الذكاء الاصطناعي الأخرى، فهي فعّالة للغاية في نمذجة الأفكار بسرعة التي كانت ستكلف الكثير لرسمها يدويًا.

طلبتُ صفحة رئيسية تحريرية بأسلوب براوسالي قاسٍ، مع محتوى غير تقليدي جدًا من المجتمع. حصلتُ على هذا التخطيط، الذي يحتوي بالفعل على بعض الأفكار الرائعة لكتل المحتوى المميزة. والأكثر طرافة، أنه سمّى الموضوع صحيفة من الجحيم :grinning_face_with_smiling_eyes:

ثم طلبتُ شيئًا كنتُ أرغب دائمًا في استكشافه، وهي صفحة رئيسية لبوابة بأسلوب ياباني تحتوي على كتل كثيفة، وألوان باستيلية، وكثير من الرسوم المتحركة الصغيرة.. أحببتُ هذا التفسير الأولي:

في الواقع، يحتاج إلى عرض شاشة لأن جميع الرسوم المتحركة الصغيرة تجعله أفضل بكثير:

flushy

أخيراً!!! سأجربه في أقرب وقت لتحديث مكونات سُمري التجريبي :blush:

إلمو محاط بنيران شديدة

هذا عمل رائع ومبدع للغاية. إذا قمنا بتفرع هذا السمة والبناء عليه، فهل توجد اعتبارات بخصوص عدم تحديث السمة الأصلية مع منصة Discourse بمرور الوقت؟ نحاول التفكير في كيفية التعامل مع هذا الأمر.

شكرًا لك على الموارد!

شكرًا لك @BrianC!

بشأن بقاء النسخة الأصلية محدثة: يتبع مسار المهارات (skills track) واجهات برمجة التطبيقات (APIs) الخاصة بـ Discourse والمكونات (Blocks)، لذا طالما أننا نستخدمها بنشاط، فستظل متزامنة مع تطور واجهات برمجة التطبيقات. يُعد موضوع الأمثلة مجرد لقطة توضيحية للأنماط. إذا قمت بعمل نسخة فرعية (fork) منه، فإنك تملك نسختك الفرعية. ولكن يمكنك الرجوع إلى مسار المهارات أو الأمثلة الجديدة عند تحديث موضوعك.

تتمثل إحدى الأهداف الرئيسية لواجهة برمجة التطبيقات الخاصة بالمكونات (Blocks API) في توفير مساحة سطح مستقرة وصغيرة، تساعد في الحفاظ على مرونة التخصيصات عبر تحديثات Discourse. لذا، إذا كنت تضيف في الغالب مكونات مخصصة (كما يفعل موضوع الأمثلة)، فستعمل بالفعل ضمن بيئة مستقرة. الشيء الرئيسي الذي يجب مراقبته هو التغييرات في أسماء المنافذ (outlet names) أو توقيعات واجهة برمجة التطبيقات للمكونات. حاليًا، لا تزال واجهة برمجة التطبيقات تعتبر تجريبية، لذا قد تكون هناك تغييرات في الأسماء وما إلى ذلك.

أرى أن النهج الموصى به هو: قم بعمل نسخة فرعية من الموضوع بحرية، واعتمد على وثائق مسار المهارات كمرجع حي لكيفية تنفيذ الأمور في المستقبل.

أنا فقط أبدأ في التجربة مع هذا (بدون استخدام البرمجة الوكيلية).

أتشكّل لديّ انطباع بأن تحويل هذا إلى مكون موضوع (Theme Component) يتحكم في صفحة الموقع الرئيسية فقط - على سبيل المثال، موقع يستخدم بالفعل موضوع Horizon - لن يتطلب جهدًا كبيرًا. هل سيكون هذا أمرًا غبيًا؟

أيضًا، لاحظت بضع مشكلات:

كتلة "الأحداث القادمة

شكرًا لتجربته @nathank! لا يزال يُعتبر تجريبيًا وسنقوم بإجراء تغييرات على واجهة برمجة التطبيقات (API)، لذلك لا أنصحك ببناء مكون قالب من نوع “منشئ صفحات رئيسية” يعتمد عليها في الوقت الحالي.

كتل العرض التوضيحي هي مجرد أمثلة أساسية. لدينا أيضًا بعض التغييرات القادمة على واجهة برمجة التطبيقات (API) التي ستحسن طريقة تحميل البيانات. سأقوم بنشر التغييرات على جميع الكتل في قالب العرض التوضيحي بمجرد توفر هذه الميزات.

من المفترض أن تظهر كتلة لافتات التصنيفات على جميع التصنيفات. أعتقد أن منتقي التصنيفات الذي تشير إليه مخصص لكتلة التصنيفات المميزة على الصفحة الرئيسية.

أخيرًا، اتخذتُ الخطوة وبدأتُ بالتجريب قليلًا مع هذا الأمر. شكرًا جزيلًا لمشاركتكم.

أتساءل عن مدى إمكانية إنشاء كتلة مخصصة تعرض صورة المستخدم الرمزية واسمه (وهو ما تمكنتُ من تحقيقه بالفعل) إلى جانب عدد مواضيعه ومنشوراته، والإعجابات، ونقاط التشجيع، وشيء مشابه لما هو موجود في See TL3 Progress ولكن فيما يتعلق بشارات محددة (مستوى ثقة مخصص مبني عليها)؟

مستوحى من ألعاب الأدوار، حيث يمكن للمرء أن يرى على بطاقة شخصية الشخصية الخاصة به نقاط الخبرة (EXP) والمعلومات الأساسية ومهاراتها الرئيسية.

إذا كنت ترغب في إضافة كتلة، أعتقد أنك ستحتاج إلى إرسال طلب دمج إلى النواة.

لقد كنت أقرأ عن واجهة برمجة التطبيقات الخاصة بالكتل (Blocks API)، وقد كانت ask.discourse مفيدة للغاية.

أود أن أحاول تقليد (أو نسخ) شريط تصنيفات الميتا مع الأيقونات، إلى جانب بعض الأفكار الأخرى.

معظم المواد التي قرأتها تميل إلى المواقع المستضافة ذاتيًا (self-hosted) وليس المواقع المضافة (hosted).

هل توجد أي قيود على المواقع المضافة؟

هذا ممكن تمامًا، والوكيل الذي يستخدم المهارات والكتل الأمثلة من السمة المشتركة يجب أن يكون قادرًا تمامًا على كتابة هذا الشيفرة.

في الواقع، قمت بإنشاء كتلة مشابهة قبل فترة. إنها لا تستخدم بعد واجهة برمجة التطبيقات الجديدة للكتل (Blocks API)، لكن لا يزال بإمكانك الاطلاع على النهج المستخدم في Manuel Kostka / Discourse / Blocks / User Profile · GitLab. يبدو مثل هذا على سبيل المثال، في سمة Canvas Central:

ليس لدينا كتل في النواة (بعد). جميع الكتل تُضاف فقط باستخدام السمات أو مكونات السمات.

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

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

من المرجح أن يستمد البوت اتجاهه من الإعلان الرسمي: Creating a 'Blocks' API for injecting content

لكني أتفق معك، لا ينبغي استخدامه في بيئة الإنتاج حاليًا، إذ من المرجح أن تحدث تغييرات كاسرة دون إخطار مسبق.

أنا أتجرب على موقع تجريبي، ولن أتدخل في بيئة الإنتاج.

لكن ذلك يجب أن يكون مقبولاً. التحذير ليس أن الأمر غير شامل بعد، بل أننا لن نتخذ تدابير احترازية ضد التغييرات التي قد تكسر التوافق، كما نفعل مع واجهات البرمجة أو الواجهات الأخرى المستقرة.

أوه، بالطبع. أنا غبي. كنت أظن أنه يشير إلى إضافة مواقع الكتل.

نعم، BlockOutlets موجودة في النواة الأساسية. ومع ذلك، يمكنك أيضًا إضافتها باستخدام إضافة (plugin).