يمكنك استبدال أيقونات SVG الافتراضية في Discourse بشكل فردي أو كحزمة كاملة بأيقونات SVG مخصصة لك، وتجاوزها داخل سمة أو مكوّن سمة.
الخطوة 1 - إنشاء ورقة رموز SVG (SVG Spritesheet)
للبداية، يجب عليك إنشاء ورقة رموز SVG. يمكن أن تحتوي هذه الورقة على أي شيء، بدءًا من أيقونة SVG مخصصة واحدة إضافية وصولاً إلى مجموعة كاملة من الاستبدالات المكونة من مئات الأيقونات.
يجب حفظ ورقة الرموز كملف SVG. من حيث المبدأ، تقوم بتضمين محتوى وسم <svg> من ملف أيقونة SVG الأصلي داخل وسوم <symbol> ومنحها معرّفًا (identifier) مناسبًا.
<?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) لكل رمز في ورقة الرموز. من المفيد على الأرجح لسلامتك العقلية أن تضع بادئة (prefix) لمعرّفاتك باسم سمتك
my-theme-icon. -
لجعل لون الأيقونة ديناميكيًا مثل الأيقونات الموجودة، اضبط التعبئة (fill) على
currentColorبدلاً من لون ثابت (مثل #333) -
لتكبير أو تصغير أيقونتك أو توسيطها بشكل صحيح، استخدم سمة
viewBoxعلى وسم<symbol>. راجع How to Scale SVG | CSS-Tricks لمزيد من المعلومات. -
كن حذرًا من تعارضات الأنماط (style collisions) داخل ملفات 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 إلى مكوّنك/سمتك. هذا سهل من خلال واجهة المستخدم (UI)، أو يمكنك ترميزه يدويًا في مكوّن/سمة.
بمجرد رفعه إلى أي مكوّن/سمة مثبّت، يصبح متاحًا في جميع أنحاء مثيلتك باستخدام المعرّف الموجود في وسم
<symbol>.
من خلال واجهة المستخدم (UI)
انتقل إلى قسم الرفع (Uploads) في إعدادات السمة/المكوّن وأضف ملف الـ sprite الخاص بك مع اسم متغير SCSS هو icons-sprite:
الترميز اليدوي في سمة / مكوّن
أضف ملف ورقة الرموز إلى مجلد /assets الخاص بالسمة. ثم حدّث ملف assets.json في المجلد الجذر.
لأيقونة SVG تسمى my-icons.svg، يجب أن يتضمن ملف about.json الخاص بك ما يلي:
"assets": {
"icons-sprite": "/assets/my-icons.svg"
}
الخطوة 3 (اختياري) - تجاوز الأيقونات الافتراضية
الآن بعد ضبط ورقة الرموز، يمكنك إخبار Discourse باستبدال الأيقونات. إليك الطريقة للقيام بذلك من مهيئ API (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.








