الصفحات (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": [ ... ]
}
]
}
الخصائص
| الخاصية | النوع | الوصف |
|---|---|---|
layout | string | اسم ملف التخطيط من layouts/ (بدون .njk) |
title | string | عنوان الصفحة لـ SEO والمسار |
widgets | array | قائمة مرتبة من نسخ الـ 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"
}
}
]
}
| الخاصية | النوع | الوصف |
|---|---|---|
name | string | اسم النسخة المعروض في منشئ القوالب |
widget | string | اسم مجلد الـ widget من widgets/ |
settings | object | قيم إعدادات مستوى الـ widget |
blocks | array | نسخ الـ 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
}
}
]
}
]
}
كيف تُعرض الصفحات
- يُحمّل ملف التخطيط (
layouts/layout.njk) - تُعرض القوالب (header, footer, global) عبر وسوم
{% template %} - تحل 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؟ تحقق من الأقواس والفواصل
- استخدم وحدة تحكم المتصفح لأخطاء القالب