مثال بسيط لإضافة لتغيير الملفات؟

أنا أحاول كتابة أولى الإضافات الأساسية جدًا الخاصة بي على Discourse، بعد قراءة الكثير عن Ruby والمزايا التي تقدمها اللغة لنا :slight_smile:

أريد إضافة نص إلى صفحات معينة مثل الشارات (badges)، ولوحة الصدارة (leaderboard - gamification) وتعديلات بسيطة مماثلة مثل تغيير السلوك الافتراضي لنتائج ترتيب البحث، آخر المشاركات بدلاً من الأهمية.

أتفهم أن النهج الأفضل هو تجنب عمل fork للنواة وكتابة الإضافات. لذا، أين يمكنني البحث إذا أردت تغيير ملفات معينة في Discourse من إضافة؟

يمكننا أخذ مثال على تعديل هذا الملف:

كيف أخبر Discourse باستخدام الإضافة topic_embed.rb واستبدال الافتراضي؟

إعجابَين (2)

هذه تقنية تُعرف باسم “monkey patching”. هناك عدة طرق لتحقيق ذلك، ولكن الأسهل هو مجرد تعريف الطريقة التي تريد استبدالها في المكون الإضافي الخاص بك.

after_initialize do
  class ::TopicEmbed
    def self.imported_from_html(url)
       # your code
    end
  end
end
إعجابَين (2)

حسنًا، يُفترض أننا جئنا من القرود، لذا بعد كل شيء، قد يكون هذا شيئًا جيدًا للقيام به باتباع مثالك :slight_smile:

شكرًا على ردك! أنا أجربه ولكن ماذا يمكنني أن أفعل إذا أردت تغيير ملف embed.rb بالكامل؟

أرى أنه لا يمكن استخدامه إلا لاستبدال فئة معينة ولكنني أريد استبدال التضمين بالكامل بإزالة الأزرار وإظهار onebox بسيط.

يمكنني العمل على الملف ولكنني لا أعرف كيفية وضع هذا الملف في Discourse دون عمل fork (يبدو هذا وكأنه gorilla patching).

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

هناك الكثير من المواد الموجودة هنا. فقط انظر إلى كل العشرات من الإضافات الموجودة.

إليك مثال على تجاوز نظام onebox:

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

ومرة أخرى، وفقًا لريتشارد، فأنت تقريبًا لا تتجاوز الملفات بأكملها أبدًا (في Ruby on Rails على الأقل). تحتاج إلى التفكير في الأساليب.

إعجابَين (2)