المقدمة
إدارة صفحات الموقع الإلكتروني وشاشات التطبيق المحمول بمحتوى ديناميكي.
🎯 ماذا يفعل هذا الموديل؟
يتيح لك موديل Pages إنشاء واسترجاع وإدارة الصفحات (للمواقع الإلكترونية) أو الشاشات (للتطبيقات المحمولة) مع كل محتواها - النصوص، الصور، إعدادات تحسين محركات البحث، والسمات المخصصة.
فكر في الأمر كنظام إدارة محتوى - بدلاً من ترميز الصفحات بشكل ثابت، يمكنك إدارتها في OneEntry واسترجاعها ديناميكيًا في تطبيقك.
📖 شرح بسيط
تخيل أنك تبني موقعًا إلكترونيًا مع هذه الصفحات:
- 🏠 الصفحة الرئيسية - الصفحة الرئيسية
- 📄 من نحن - معلومات الشركة
- 📞 اتصل بنا - صفحة نموذج الاتصال
- 📝 المقالات - صفحات مقالات متعددة
- ❓ الأسئلة الشائعة - مركز المساعدة
بدلاً من إنشاء كل صفحة يدويًا في الكود الخاص بك، يمكنك:
- ✅ إنشاء الصفحات في لوحة إدارة OneEntry (مع المحتوى، الصور، تحسين محركات البحث)
- ✅ استرجاع الصفحات ديناميكيًا باستخدام هذا الموديل
- ✅ تحديث المحتوى دون إعادة نشر تطبيقك
- ✅ إدارة هيكل الصفحة، وعناوين URL، والبيانات الوصفية في مكان واحد
مثال من العالم الحقيقي:
Without Pages Module (hardcoded):
- Edit homepage → Change code → Test → Deploy → Wait ❌
- 10 pages = 10 code files to manage ❌
- SEO changes = code changes ❌
With Pages Module (dynamic):
- Edit homepage → Update in OneEntry admin → Live instantly ✅
- 100 pages = fetch dynamically from API ✅
- SEO changes = update in admin panel ✅
✨ المفاهيم الأساسية
ما هي الصفحة؟
الصفحة هي كيان محتوى يمثل:
- ويب: صفحة على موقعك الإلكتروني (مثل:
/about,/contact) - محمول: شاشة في تطبيقك (مثل: شاشة الملف الشخصي، شاشة الإعدادات)
تحتوي كل صفحة على:
- المحتوى - نصوص، صور، فيديوهات
- عنوان URL - عنوان الصفحة (مثل:
/about-us) - تحسين محركات البحث - عنوان ميتا، وصف، كلمات مفتاحية
- سمات مخصصة - أي حقول إضافية تحددها
- الحالة - منشورة، مسودة، مؤرشفة
- التعريب - دعم متعدد اللغات
أنواع الصفحات
يدعم OneEntry أنواعًا مختلفة من الصفحات:
| النوع | الوصف | مثال الاستخدام |
|---|---|---|
| صفحة شائعة | صفحة ثابتة قياسية | من نحن، اتصل بنا، الشروط |
| صفحة كتالوج | صفحات الكتالوج | صفحات الكتالوج |
| صفحة خارجية | صفحات خارجية | صفحات خارجية |
| صفحة خطأ | صفحات خطأ 404، 500 | صفحة غير موجودة |
هيكل الصفحة
يمكن تنظيم الصفحات في هيكل شجري:
📁 Company
├─ About Us
├─ Team
└─ Careers
📁 Products
├─ Product Category 1
│ ├─ Product A
│ └─ Product B
└─ Product Category 2
لماذا يهم هذا: يمكنك استرجاع جميع الصفحات في قسم أو بناء قوائم التنقل تلقائيًا.
📋 ما تحتاج لمعرفته
طريقتان لتحديد الصفحات
| الطريقة | متى تستخدمها | مثال |
|---|---|---|
| حسب URL | يزور المستخدم صفحة معينة | /about-us, /contact |
| حسب ID | مراجع داخلية | 123, 456 |
أفضل ممارسة: استخدم id في الكود (لأنها لا تتغير)، استخدم عناوين URL للتوجيه.
هيكل الصفحة
كل صفحة تحتوي على هذه الحقول الرئيسية:
{
"id": 9, // unique ID
"parentId": 8, // parent ID
"moduleFormConfigs": [], // Forms module configurations
"pageUrl": "blog1", // page URL
"depth": 1, // depth
"localizeInfos": { // localization info
"title": "Blog 1", // title
"menuTitle": "Blog 1", // menu title
"htmlContent": "",
"plainContent": "",
},
"isVisible": true, // visibility
"blocks": [], // blocks
"type": "common_page", // page type
"templateIdentifier": null, // template identifier
"attributeSetIdentifier": null, // attribute set identifier
"attributeValues": {}, // attribute values
"isSync": false, // sync
}
التعريب (دعم متعدد اللغات)
تدعم الصفحات لغات متعددة
نفس الصفحة، لغات مختلفة!
السمات المخصصة
يمكنك إضافة أي حقول إلى الصفحات باستخدام AttributesSets:
أمثلة:
- المقالات: المؤلف، تاريخ النشر، العلامات، الصورة المميزة
- صفحات المنتجات: السعر، SKU، المعرض، المواصفات
- صفحات الهبوط: صورة البطل، أزرار CTA، الشهادات
تعلم المزيد: انظر AttributesSets Module
📊 جدول مرجعي سريع - الطرق الشائعة
| الطريقة | ماذا تفعل | متى تستخدمها |
|---|---|---|
| getPages() | الحصول على جميع الصفحات (مقيدة) | بناء خريطة الموقع، قائمة بجميع الصفحات |
| getRootPages() | الحصول على جميع الصفحات الجذرية (مقيدة) | |
| getChildPagesByParentUrl() | الحصول على جميع الصفحات الفرعية حسب ParentUrl (مقيدة) | |
| getBlocksByPageUrl() | الحصول على كائنات PositionBlock للصفحة حسب URL. | تُستخدم الكتل لعرض محتوى الصفحة. |
| getConfigPageByUrl() | الحصول على الإعدادات للصفحة حسب URL. | تُستخدم صفحات الإعدادات لتخزين الإعدادات للصفحة. |
| getPageById() | الحصول على صفحة واحدة. | تُستخدم الصفحات لعرض الصفحة. |
| getPageByUrl() | الحصول على صفحة واحدة حسب URL. | تُستخدم الصفحات لعرض الصفحة. |
| searchPage() | بحث سريع عن الصفحات مع مخرجات محدودة. | البحث عن الصفحات حسب العنوان، الوصف، العلامات، إلخ. |
❓ الأسئلة الشائعة (FAQ)
ما الفرق بين URL و ID؟
-
URL (
pageUrl) - عنوان الويب الذي يراه المستخدمون (مثل:/about-us,/contact)- يُستخدم للتوجيه
- سهل الاستخدام
-
ID - معرف تقني في الكود (مثل:
123,124)- يُستخدم في المراجع البرمجية
- تقني، وليس موجهًا للمستخدم
💡 ملاحظات مهمة
عناوين URL للصفحات والتوجيه
أفضل ممارسة للتوجيه:
✅ جيد: مسار شامل ديناميكي مثال Next.js: pages/[...slug].js
التخزين المؤقت للأداء
تقليل استدعاءات API باستخدام التخزين المؤقت.
معاينة المسودات
عرض صفحات المسودات للمسؤولين فقط.
🎓 أفضل الممارسات
- تخزين الصفحات مؤقتًا لتقليل استدعاءات API
- التعامل مع أخطاء 404 بشكل سلس
- تصفية حسب
statusId: 1وisVisible: trueللإنتاج - إضافة حالات تحميل في واجهة المستخدم
- تنفيذ استراتيجية تخزين مؤقت للصفحات
مزيد من المعلومات حول واجهة مستخدم الموديل https://doc.oneentry.cloud/docs/category/pages
تعريف موديل Pages
const { Pages } = defineOneEntry( "your-project-url", { "token": "your-app-token" });
🔗 الوثائق ذات الصلة
- موديل المنتجات - إدارة منتجات التجارة الإلكترونية
- موديل الكتل - كتل محتوى قابلة لإعادة الاستخدام للصفحات
- موديل AttributesSets - حقول مخصصة (attributesets) للصفحات
- موديل القوائم - إدارة قوائم التنقل