انتقل إلى المحتوى الرئيسي

الصفحات (Pages)

كل ملف JSON في مجلد pages/ يمثل صفحة في قالبك. الصفحات تحدد أي تخطيط يُستخدم وأي widgets تُعرض.

ملفات الصفحات

pages/
├── index.json # الصفحة الرئيسية
├── product.json # صفحة المنتج الواحد
├── collection.json # صفحة المجموعة/الفئة
├── cart.json # سلة التسوق
├── search.json # نتائج البحث
├── blog.json # قائمة المدونة
├── article.json # مقالة مدونة واحدة
├── page.json # صفحة عامة
└── collections.json # قائمة المجموعات

هيكل الصفحة

{
"layout": "layout",
"title": "الصفحة الرئيسية",
"widgets": [
{
"name": "hero-slider",
"widget": "hero-slider",
"settings": { ... },
"blocks": [ ... ]
}
]
}

الخصائص

الخاصيةالنوعالوصف
layoutstringاسم ملف التخطيط من layouts/ (بدون .njk)
titlestringعنوان الصفحة لـ SEO والمسار
widgetsarrayقائمة مرتبة من نسخ الـ widgets

نسخة Widget

كل widget في مصفوفة widgets لديه:

{
"name": "hero-slider",
"widget": "hero-slider",
"settings": {
"autoplay": true,
"speed": 5,
"contentPosition": "center",
"titleColor": "#ffffff"
},
"blocks": [
{
"block": "slide",
"name": "الشريحة 1",
"settings": {
"title": "مرحباً بكم في متجرنا",
"description": "اكتشف منتجات مذهلة",
"buttonText": "تسوق الآن",
"buttonUrl": "/collections"
}
}
]
}
الخاصيةالنوعالوصف
namestringاسم النسخة المعروض في منشئ القوالب
widgetstringاسم مجلد الـ widget من widgets/
settingsobjectقيم إعدادات مستوى الـ widget
blocksarrayنسخ الـ blocks (إذا كان الـ widget يدعم blocks)

مثال صفحة كاملة

index.json (الصفحة الرئيسية):

{
"layout": "layout",
"title": "الصفحة الرئيسية",
"widgets": [
{
"name": "hero-slider",
"widget": "hero-slider",
"settings": {
"autoplay": true,
"speed": 5
},
"blocks": [
{
"block": "slide",
"name": "شريحة الترحيب",
"settings": {
"title": "مرحباً بكم في متجرنا",
"buttonText": "تسوق الآن",
"buttonUrl": "/collections"
}
},
{
"block": "slide",
"name": "وصول جديد",
"settings": {
"title": "وصول جديد",
"buttonText": "اكتشف",
"buttonUrl": "/collections/new"
}
}
]
},
{
"name": "categories",
"widget": "categories",
"settings": {
"title": "تسوق حسب الفئة",
"columns": 4
}
},
{
"name": "product-slider",
"widget": "product-slider",
"settings": {
"title": "منتجات مميزة",
"collection": "featured"
}
},
{
"name": "testimonials",
"widget": "testimonials",
"settings": {
"title": "ماذا يقول عملاؤنا"
},
"blocks": [
{
"block": "testimonial",
"name": "تقييم 1",
"settings": {
"customerName": "أحمد",
"review": "منتجات رائعة وشحن سريع!",
"rating": 5
}
}
]
}
]
}

كيف تُعرض الصفحات

  1. يُحمّل ملف التخطيط (layouts/layout.njk)
  2. تُعرض القوالب (header, footer, global) عبر وسوم {% template %}
  3. تحل widgets الصفحة محل {% content %} بالترتيب
{# في layout.njk #}
<body>
{% template "header" %}

<main>
{% content " " %} {# widgets الصفحة تُعرض هنا #}
</main>

{% template "footer" %}
</body>

نصائح

أفضل الممارسات
  • استخدم قيم name وصفية لسهولة التعرف في المنشئ
  • احتفظ بصفحة واحدة لكل ملف (product.json, search.json، إلخ)
  • قدم قيم إعدادات افتراضية معقولة
  • اختبر ترتيبات الـ widgets مع qumra theme dev
تصحيح الأخطاء
  • الـ widget لا يظهر؟ تحقق من أن widget يطابق مجلداً في widgets/
  • أخطاء JSON؟ تحقق من الأقواس والفواصل
  • استخدم وحدة تحكم المتصفح لأخطاء القالب