مقدمة
حدد حقول مخصصة لمحتواك دون الحاجة إلى تعديل الكود.
🎯 ماذا يفعل هذا الموديل؟
يتيح لك موديل AttributesSets استخدام حقول مخصصة لمحتواك (المنتجات، الصفحات، النماذج، إلخ) دون الحاجة إلى ترميزها في تطبيقك.
فكر في الأمر كمنشئ نماذج لبياناتك - أنت تحدد الحقول التي تحتاجها، وOneEntry يتولى الباقي.
📖 شرح بسيط
تخيل أنك تبني متجرًا عبر الإنترنت. كل منتج يحتاج إلى:
- اسم (نص).
- سعر (رقم).
- صورة (صورة).
- وصف (نص طويل).
- فئة (قائمة منسدلة).
بدلاً من ترميز هذه الحقول في تطبيقك، تستخدم Attributes لتحديدها في لوحة إدارة OneEntry. ثم يمكنك:
- إضافة حقول جديدة في أي وقت (دون تغييرات في الكود!).
- إعادة استخدام الحقول عبر أنواع محتوى مختلفة.
- تغيير أنواع الحقول دون إعادة نشر.
- إدارة هيكل المحتوى بالكامل في مكان واحد.
مثال من العالم الحقيقي:
بدون Attributes (مشفرة):
- الكود: const product = { name, price, image, description }
- لإضافة حقل "اللون" → تغيير الكود، إعادة النشر، الانتظار.
مع Attributes (ديناميكي):
- لوحة الإدارة: إضافة خاصية "اللون".
- الكود يتضمن الحقل الجديد تلقائيًا.
- لا حاجة لإعادة النشر!
✨ المفاهيم الأساسية
ما هو السمة؟
السمة هي حقل واحد يخزن البيانات.
أمثلة:
- اسم المنتج (سلسلة نصية).
- سعر المنتج (عدد عشري).
- صورة المنتج (صورة).
- تاريخ النشر (تاريخ).
ما هو مجموعة السمات؟
مجموعة السمات هي مجموعة من السمات التي تحدد هيكلًا.
مثال: مجموعة سمات المنتج
- الاسم (سلسلة نصية)
- السعر (عدد عشري)
- الوصف (نص)
- الصور (مجموعة من الصور)
- الفئة (قائمة)
- في المخزون (عدد صحيح)
لماذا تستخدم مجموعات السمات؟
| ❌ بدون السمات | ✅ مع السمات |
|---|---|
| حقول مشفرة | حقول ديناميكية |
| تغييرات في الكود | تعديل في لوحة الإدارة |
| إعادة نشر مطلوبة | تحديثات مباشرة |
| هيكل صارم | هيكل مرن |
| كود مكرر | مجموعات قابلة لإعادة الاستخدام |
📋 ما تحتاج لمعرفته
ثلاثة مصطلحات مهمة
| المصطلح | ما هو | مثال |
|---|---|---|
| المؤشر | معرف فريد للكود | "product_name" |
| النوع | نوع البيانات المخزنة | "string"، "integer"، "image" |
| القيمة | قيمة السمة | "اسم المنتج" |
مهم حول المؤشرات:
- يجب أن تكون فريدة
- لا يُسمح بالمسافات (استخدم
_بدلاً من ذلك) - لا يمكن أن تبدأ برقم
- استخدم الحروف الصغيرة للاتساق
أمثلة:
- ✅ جيد:
product_name،price_usd،main_image - ❌ سيء:
product name،2nd_price،Product Name
إعادة الاستخدام
يمكن إعادة استخدام مجموعات السمات عبر كيانات مختلفة:
مجموعة سمات "المعلومات الأساسية":
- العنوان (سلسلة نصية)
- الوصف (نص)
- تاريخ النشر (تاريخ)
تستخدم من قبل:
- المشاركات في المدونة
- مقالات الأخبار
- صفحات المنتجات
- قوائم الأحداث
لماذا يهم هذا: تغيير واحد، تحديثات في كل مكان!
📚 أن واع البيانات المتاحة
يمكن أن تخزن السمات أنواعًا مختلفة من البيانات. اختر النوع المناسب لكل حقل.
جدول مرجعي سريع
| النوع | الأفضل للاستخدام | مثال للاستخدام |
|---|---|---|
| string | نص قصير | اسم المنتج، البريد الإلكتروني |
| text | نص طويل منسق | مشاركة مدونة، وصف |
| textWithHeader | نص مع عنوان | أقسام المقالات |
| integer | أعداد صحيحة | الكمية، العمر |
| real | أعداد عشرية عالية الدقة | بيانات علمية |
| float | أعداد عشرية | السعر، التقييم |
| date | فقط التاريخ | تاريخ الميلاد، الموعد النهائي |
| dateTime | تاريخ + وقت | بدء الحدث، نشر في |
| time | فقط الوقت | ساعات العمل |
| file | أي ملف | PDF، مستند |
| image | صورة واحدة | صورة شخصية، شعار |
| groupOfImages | صور متعددة | معرض الصور |
| radioButton | اختيار واحد | الحجم (S/M/L) |
| list | اختيار من القائمة المنسدلة | الدولة، الفئة |
| entity | رابط لمحتوى آخر | المنتجات ذات الصلة |
| timeInterval | نطاق تاريخ | فترة الترويج |
| json | بيانات مهيكلة مخصصة | استجابة API |
🔍 أوصاف مفصلة لأنواع البيانات
أنواع النصوص
متى تستخدم ماذا:
- string - سطر واحد، أقل من 255 حرفًا (اسم، بريد إلكتروني، عنوان)
- text - عدة فقرات، يدعم التنسيق (مقالات، أوصاف)
- textWithHeader - نص يحتاج إلى عنوان (أقسام المدونة، الأسئلة الشائعة)
أنواع الأرقام
متى تستخدم ماذا:
- integer - لا حاجة للأعداد العشرية (العمر، الكمية، المشاهدات)
- float - أعداد عشرية قياسية (السعر 19.99 دولار، التقييم 4.5)
- real - دقة إضافية مطلوبة (حسابات علمية)
أنواع التاريخ/الوقت
متى تستخدم ماذا:
- date - فقط اليوم (عيد الميلاد، الموعد النهائي)
- time - فقط الساعة (ساعات العمل، وقت الموعد)
- dateTime - كلاهما مطلوب (بدء الحدث، نشر المقال)
- timeInterval - فترة بين التواريخ (مدة البيع، تواريخ الإجازة)
أنواع الملفات والصور
متى تستخدم ماذا:
- file - أي مستند (PDF، DOC، ZIP)
- image - صورة واحدة (صورة المنتج، صورة شخصية)
- groupOfImages - صور متعددة (معرض، صور المنتجات)
أنواع الاختيار
متى تستخدم ماذا:
- radioButton - اختر خيارًا واحدًا فقط (نعم/لا، الحجم S/M/L)
- list - قائمة منسدلة مع خيارات (الدولة، الفئة، الحالة)
أنواع متقدمة
- entity - رابط لصفحات/منتجات أخرى (عناصر ذات صلة، فئات)
- json - تخزين هياكل بيانات معقدة (استجابات API، إعدادات)
📖 أمثلة على أنواع البيانات
فيما يلي أمثلة تقنية على هيكل كل نوع بيانات.
انقر لرؤية جميع أمثلة أنواع البيانات
مرجع أنواع البيانات
يمكن أن تكون أنواع البيانات من الأنواع التالية:
- String: نص بسيط، على سبيل المثال، "مرحبًا، العالم!".
مثال:
{
"type": "string",
"value": {},
"marker": "string",
"position": 1,
"listTitles": [],
"validators": {
"requiredValidator": {
"strict": true
}
},
"localizeInfos": {
"title": "String"
},
"additionalFields": [
{
"type": "integer",
"value": "10",
"marker": "Extra"
}
]
}
- Text: نص أطول، غالبًا ما يكون منسقًا، على سبيل المثال، مقال أو رسالة.
مثال:
{
"type": "text",
"value": {},
"marker": "text",
"position": 2,
"listTitles": [],
"validators": {},
"localizeInfos": {
"title": "Text"
},
"additionalFields": []
}
- Text with Header: نص مع عنوان يمكن استخدامه للدلالة على موضوع أو فئة.
مثال:
{
"type": "textWithHeader",
"value": {},
"marker": "text_with_header",
"position": 3,
"listTitles": [],
"validators": {},
"localizeInfos": {
"title": "Text With Header"
},
"additionalFields": []
}
- Integer: عدد صحيح، على سبيل المثال، 5، 100، -2.
مثال:
{
"type": "integer",
"value": {},
"marker": "integer",
"position": 4,
"listTitles": [],
"validators": {},
"localizeInfos": {
"title": "Integer"
},
"additionalFields": []
}
- Real: نفس الشيء مثل Float، ولكن بدقة أعلى.
مثال:
{
"type": "real",
"value": {},
"marker": "real_number",
"position": 5,
"listTitles": [],
"validators": {},
"localizeInfos": {
"title": "Real Number"
},
"additionalFields": []
}
- Float: نوع بيانات للأعداد العشرية التي يمكن أ ن تحتوي على جزء عشري، على سبيل المثال، 3.14، 1.5، -0.25.
مثال:
{
"type": "float",
"value": {},
"marker": "float",
"position": 6,
"listTitles": [],
"validators": {},
"localizeInfos": {
"title": "Float"
},
"additionalFields": []
}
- Date and Time: مجموعة من التاريخ والوقت، على سبيل المثال، 2023-10-27 10:00:00.
مثال:
{
"type": "dateTime",
"value": {},
"marker": "date_time",
"position": 7,
"listTitles": [],
"validators": {},
"localizeInfos": {
"title": "DateTime"
},
"additionalFields": []
}