يمكنك استبدال أيقونات SVG الافتراضية في Discourse بشكل فردي أو ككل باستخدام SVG المخصص الخاص بك وتجاوزها ضمن سمة أو مكون سمة.
الخطوة 1 - إنشاء مجموعة أيقونات SVG (Spritesheet)
للبدء، يجب عليك إنشاء مجموعة أيقونات SVG. يمكن أن تحتوي هذه المجموعة على أي شيء بدءًا من أيقونة SVG مخصصة إضافية واحدة وصولًا إلى مجموعة استبدال كاملة تضم المئات.
يجب حفظ مجموعة الأيقونات كملف SVG. من حيث المبدأ، تقوم بتضمين محتويات وسم \u003csvg\u003e من ملف أيقونة SVG الأصلي داخل وسوم \u003csymbol\u003e ومنحها مُعرّفًا جيدًا.
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
<symbol id="my-theme-icon-1">
<!--
الكود الموجود داخل وسم <svg> من ملف أيقونة SVG المصدر
هذا عادةً كل شيء بين وسمي <svg>
(وليس وسم SVG نفسه، الذي تم استبداله بـ <symbol> أعلاه)
يمكنك نقل أي سمات (مثل ViewBox="0 0 0 0") إلى وسم <symbol>
-->
</symbol>
<symbol id="my-theme-icon-2">
<!-- كود SVG هنا. أضف المزيد من كتل <symbol> حسب الحاجة.
-->
</symbol>
</svg>
-
تأكد من إضافة مُعرّف (ID) مخصص لكل رمز (symbol) في مجموعة الأيقونات. قد يكون من المفيد لسلامتك إضافة بادئة لأسماء المعرفات الخاصة بك باسم السمة الخاصة بك
my-theme-icon. -
لجعل لون الأيقونة ديناميكيًا مثل الأيقونات الحالية، قم بتعيين التعبئة (fill) على
currentColorبدلاً من لون ثابت (مثل #333). -
لتغيير حجم الأيقونة أو توسيطها بشكل صحيح، استخدم السمة
viewBoxعلى وسم\u003csymbol\u003e. راجع How to Scale SVG | CSS-Tricks لمزيد من المعلومات. -
كن منتبهًا لتضارب الأنماط داخل ملفات SVG الخاصة بك. على سبيل المثال، غالبًا ما تحتوي ملفات SVG على نمط مضمن مثل
.st0{fill:#FF0000;}محدد. إذا كان لديك العديد من ملفات SVG التي تستخدم نفس الفئات، فقد يتسبب ذلك في حدوث مشكلات (لحل هذه المشكلات، قم بتعديل الفئات لتكون فريدة لكل أيقونة). -
إذا كان لديك العديد من الأيقونات، فهناك طرق لأتمتة ذلك. https://www.npmjs.com/package/svg-sprite-generator هي أداة بسيطة لسطر الأوامر لدمج ملفات SVG في مجموعة أيقونات.
مثال - مجموعة أيقونات مخصصة واحدة
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
<symbol id="bat-icon" viewBox="6 6 36 36">
<path
fill="currentColor"
d="M24,18.2c0.7,0,0.9,0.2,0.9,0.2l0.4-1.7c0,0,0.4,1.5,0.4,2.8c0.2,1.1,2.2,0.4,3.9,0C31.4,19.1,32,16,32,16h16c0,0-9.4,3.5-7,10c0,0-14.8-2-17,7l0,0c-2.2-9-17-7-17-7c2.4-6.5-7-10-7-10h16c0,0,0.6,3.1,2.3,3.5c1.7,0.4,3.9,1.1,3.9,0c0.2-1.1,0.4-2.8,0.4-2.8l0.4,1.7C23.1,18.4,23.4,18.2,24,18.2L24,18.2L24,18.2z"
/>
</symbol>
</svg>
الخطوة 2 - إضافة مجموعة الأيقونات إلى السمة الخاصة بك
بمجرد إنشاء مجموعة الأيقونات الخاصة بك، تحتاج إلى إضافة ملف SVG إلى المكون/السمة الخاصة بك. يتم ذلك بسهولة عبر واجهة المستخدم، أو يمكنك ترميزه مباشرة في مكون/سمة.
بمجرد تحميله إلى أي مكون/سمة مثبتة، يصبح متاحًا في جميع أنحاء مثيلك باستخدام المعرّف الموجود في وسم
\u003csymbol\u003e.
عبر واجهة المستخدم
انتقل إلى قسم التحميلات (Uploads) في إعدادات السمة/المكون وأضف ملف المجموعة الخاص بك باسم متغير SCSS هو icons-sprite:
الترميز المباشر في سمة / مكون
أضف ملف مجموعة الأيقونات إلى مجلد /assets الخاص بالسمة. ثم قم بتحديث ملف assets.json الخاص بك في المجلد الجذر.
بالنسبة لملف SVG يسمى my-icons.svg، يجب أن يتضمن ملف about.json الخاص بك ما يلي:
"assets": {
"icons-sprite": "/assets/my-icons.svg"
}
الخطوة 3 (اختياري) - تجاوز الأيقونات الافتراضية
الآن بعد أن تم تعيين مجموعة الأيقونات الخاصة بك، يمكنك إخبار Discourse باستبدال الأيقونات. هذه هي الطريقة التي يتم بها ذلك من مُهيئ واجهة برمجة التطبيقات (api-initializer):
// {theme}/javascripts/discourse/api-initializers/init-theme.gjs
import { apiInitializer } from "discourse/lib/api";
export default apiInitializer((api) => {
api.replaceIcon("bars", "my-theme-icon-bars");
api.replaceIcon("link", "my-theme-icon-link");
// إلخ.
});
المعرّف الأول، bars، هو مُعرّف الأيقونة الافتراضي في Discourse والمعرّف الثاني هو مُعرّف الأيقونة البديلة الخاصة بك. أسهل طريقة للعثور على مُعرّف إحدى أيقوناتنا هي فحص الأيقونة في متصفحك.
هنا يتبع اسم الأيقونة البادئة d-icon-. لذا في هذا المثال، إنها d-unliked
تتبع معظم أيقوناتنا أسماء الأيقونات من https://fontawesome.com/، ولكن هناك استثناءات (وهذا هو السبب في أن التحقق من المعرّف في مُفتشك هو الطريقة الأكثر موثوقية). يمكنك رؤية جميع الاستثناءات في الكتلة const REPLACEMENTS هنا على github.
هذا كل شيء. يمكنك الآن تصميم Discourse باستخدام أيقوناتك المخصصة!
هذه الوثيقة يتم التحكم في إصدارها - اقترح التغييرات على github.








