Skip to main content

Templates

Templates group widgets into reusable regions that appear on every page (header, footer, global elements).

Template Files

templates/
├── header.json # Header area (announcement bar + navigation)
├── footer.json # Footer area (footer widget)
└── global.json # Global widgets (WhatsApp button, mobile nav)

Template Structure

Each template file contains:

{
"title": "Header",
"allowAdd": true,
"allowRemove": true,
"allowReorder": true,
"widgets": [
{
"name": "announcement-bar",
"widget": "announcement-bar",
"settings": { ... },
"blocks": [ ... ]
},
{
"name": "header",
"widget": "header",
"settings": { ... }
}
]
}

Properties

PropertyTypeDescription
titlestringDisplay name in the theme builder
allowAddbooleanAllow adding new widgets
allowRemovebooleanAllow removing widgets
allowReorderbooleanAllow reordering widgets
widgetsarrayList of widget instances

Common Templates

header.json

Groups widgets for the site header:

{
"title": "Header",
"allowAdd": true,
"allowRemove": true,
"allowReorder": true,
"widgets": [
{
"name": "announcement-bar",
"widget": "announcement-bar",
"settings": {
"backgroundColor": "#003033",
"textColor": "#ffffff"
},
"blocks": [
{
"block": "announcement",
"name": "Announcement 1",
"settings": {
"text": "Free shipping on orders over $50",
"link": "/collections"
}
}
]
},
{
"name": "header",
"widget": "header",
"settings": {
"showSearch": true,
"showCart": true,
"showAccount": true,
"showWishlist": true
}
}
]
}

footer.json

Groups widgets for the site footer:

{
"title": "Footer",
"allowAdd": true,
"allowRemove": true,
"allowReorder": true,
"widgets": [
{
"name": "footer",
"widget": "footer",
"settings": {
"showNewsletter": true,
"showPaymentMethods": true,
"copyrightText": "© 2024 Store Name. All rights reserved."
}
}
]
}

global.json

Groups widgets that appear globally (floating elements, mobile navigation):

{
"title": "Global",
"allowAdd": true,
"allowRemove": true,
"allowReorder": true,
"widgets": [
{
"name": "whatsapp-button",
"widget": "whatsapp-button",
"settings": {
"phoneNumber": "+1234567890",
"defaultMessage": "Hello! I have a question."
}
},
{
"name": "mobile-nav",
"widget": "mobile-nav",
"settings": {}
}
]
}

Template Rendering Order

Define the order in settings/templates-settings.json:

{
"templates_order": ["header", "global", "main", "footer"]
}

The main entry represents the page content ({% content %}).


Using Templates in Layout

Include templates in your 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>

Tips

Best Practices
  • Group related widgets logically (all header widgets in header.json)
  • Use global.json for floating elements like WhatsApp buttons
  • Set allowAdd: false for templates that should have fixed widgets
  • Order templates in templates-settings.json to control rendering sequence