القوالب (Templates)
القوالب تجمع الـ widgets في مناطق قابلة لإعادة الاستخدام تظهر في كل صفحة (الرأس، التذييل، العناصر العامة).
ملفات القوالب
templates/
├── header.json # منطقة الرأس (شريط الإعلانات + التنقل)
├── footer.json # منطقة التذييل (widget التذييل)
└── global.json # widgets عامة (زر WhatsApp، التنقل المحمول)
هيكل القالب
كل ملف قالب يحتوي على:
{
"title": "الرأس",
"allowAdd": true,
"allowRemove": true,
"allowReorder": true,
"widgets": [
{
"name": "announcement-bar",
"widget": "announcement-bar",
"settings": { ... },
"blocks": [ ... ]
},
{
"name": "header",
"widget": "header",
"settings": { ... }
}
]
}
الخصائص
| الخاصية | النوع | الوصف |
|---|---|---|
title | string | اسم العرض في منشئ القوالب |
allowAdd | boolean | السماح بإضافة widgets جديدة |
allowRemove | boolean | السماح بإزالة الـ widgets |
allowReorder | boolean | السماح بإعادة ترتيب الـ widgets |
widgets | array | قائمة نسخ الـ widgets |
القوالب الشائعة
header.json
تجمع widgets لرأس الموقع:
{
"title": "الرأس",
"allowAdd": true,
"allowRemove": true,
"allowReorder": true,
"widgets": [
{
"name": "announcement-bar",
"widget": "announcement-bar",
"settings": {
"backgroundColor": "#003033",
"textColor": "#ffffff"
},
"blocks": [
{
"block": "announcement",
"name": "إعلان 1",
"settings": {
"text": "شحن مجاني للطلبات فوق 50$",
"link": "/collections"
}
}
]
},
{
"name": "header",
"widget": "header",
"settings": {
"showSearch": true,
"showCart": true,
"showAccount": true,
"showWishlist": true
}
}
]
}
footer.json
تجمع widgets لتذييل الموقع:
{
"title": "التذييل",
"allowAdd": true,
"allowRemove": true,
"allowReorder": true,
"widgets": [
{
"name": "footer",
"widget": "footer",
"settings": {
"showNewsletter": true,
"showPaymentMethods": true,
"copyrightText": "© 2024 اسم المتجر. جميع الحقوق محفوظة."
}
}
]
}
global.json
تجمع widgets التي تظهر عالمياً (العناصر العائمة، التنقل المحمول):
{
"title": "عام",
"allowAdd": true,
"allowRemove": true,
"allowReorder": true,
"widgets": [
{
"name": "whatsapp-button",
"widget": "whatsapp-button",
"settings": {
"phoneNumber": "+1234567890",
"defaultMessage": "مرحباً! لدي سؤال."
}
},
{
"name": "mobile-nav",
"widget": "mobile-nav",
"settings": {}
}
]
}
ترتيب عرض القوالب
حدد الترتيب في settings/templates-settings.json:
{
"templates_order": ["header", "global", "main", "footer"]
}
إدخال main يمثل محتوى الصفحة ({% content %}).
استخدام القوالب في التخطيط
ضمّن القوالب في layout.njk الخاص بك:
<!DOCTYPE html>
<html lang="ar" dir="rtl">
<head>
{% seo %}
{% qumra_head %}
<link rel="stylesheet" href="{{ 'style.css' | assets }}">
</head>
<body>
{% template "header" %}
<main>
{% content " " %}
</main>
{% template "footer" %}
{% template "global" %}
{% qumra_scripts %}
<script src="{{ 'main.js' | assets }}"></script>
</body>
</html>
نصائح
أفضل الممارسات
- جمّع الـ widgets المرتبطة منطقياً (جميع widgets الرأس في
header.json) - استخدم
global.jsonللعناصر العائمة مثل أزرار WhatsApp - اضبط
allowAdd: falseللقوالب التي يجب أن تحتوي على widgets ثابتة - رتّب القوالب في
templates-settings.jsonللتحكم في تسلسل العرض