الأقسام والكتل
إعلان الأقسام، وموزّع الأجسام، والتصيير المزدوج، والأشرطة، ومصادر المنتجات، ووحدات منصّة التشغيل.
في هذه الصفحة
هذه الصفحة لمن يريد أن يركّب التاجر صفحته بنفسه من المحرّر المرئي. في نهايتها تعرف كيف تعلن قسماً، وكيف يصل جسمه إلى الصفحة، وما القواعد التي تكسر التصيير إن نسيتها.
النموذج#
- يعلن الثيم أنواع الأقسام في
config/settings_schema.jsonتحتsections(النوع، الإعدادات، الكتل، الصفحات المسموحة). - يركّب التاجر مثيلات من هذه الأنواع في المحرّر، فتُحفظ في مستند الإعدادات تحت
pages.<page>. - عند التصيير تحلّ المنصّة المستند إلى
page_sections: مثيلات مرئية ومرتّبة ومعتمدة، مع منتجات محلولة لمن يعلن مصادر، وبلا عدّادات تنازلية منتهية. - يضع القالب
{% include 'snippets/sections.liquid' %}حيث يريد ظهور أقسام التاجر، ويكتب الثيمsnippets/section-body.liquidلتصيير جسم كل نوع.
موزّع الأجسام#
الملف الوحيد الذي تكتبه هو snippets/section-body.liquid: تبديل على section.type:
{% case section.type %}
{% when 'hero_banner' %}{% include 'snippets/section-hero-banner.liquid' %}
{% when 'featured_products' %}{% include 'snippets/section-featured-products.liquid' %}
{% when 'rich_text' %}{% include 'snippets/section-rich-text.liquid' %}
{% endcase %}داخل كل جسم يتوفّر section بالحقول id وtype وsettings وblocks وband وproducts وproducts_total. الغلاف <section class="sec sec--<type>" data-dukkan-section data-section-id="…"> تُصدره المنصّة من snippets/sections.liquid المحقون؛ لا تكتبه أنت أبداً.
القواعد التي تكسر التصيير#
- الأجسام تُصيَّر مرتين. يصيّر الموزّع كل جسم في التقاط أولاً ليكتشف الفراغ، ثم فعلياً. يجب أن يكون الجسم خالياً من الآثار الجانبية: لا
{% increment %}ولا{% decrement %}ولا حالةcycle. - الجسم الفارغ لا يُصدر غلافاً. ما يُصيَّر إلى مسافات بيضاء فقط يختفي مع غلافه، فلا يترك قسم غير مضبوط شريطاً فارغاً. استثمر ذلك: لا تُصدر شيئاً عندما لا يوجد ما يُعرض.
- التناوب. كل قسم فردي غير فارغ وغير شريطي يحمل الصنف
sec--alt؛ صمّم معالجة متناوبة عليه. الأقسام التي تعلن"band": true(شرائط بعرض الصفحة) تُستثنى من العدّ فلا يقلب إدراج بانر تناوب ما حوله، وتُعرض في السياق كـsection.band. - لا تُصدر علامات الغلاف. أي
data-dukkan-sectionأوdata-section-id=في مخرجاتك يُرفض عند الدفع.
الصفحات المسموحة#
يعلن كل نوع الصفحات التي يمكن وضعه عليها عبر enabled_on بمجموعة من home وproduct وcategory وcart. غيابه يعني الصفحة الرئيسية فقط. تضييقه لاحقاً يُسقط المثيلات المحفوظة على الصفحات المحذوفة بصمت ولا يعطّل حفظ التاجر.
مصادر المنتجات#
إعداد من نوع product أو category يحمل "source": true يجعل المنصّة تجلب منتجاته قبل التصيير وتضعها في section.products (وفي block.products للكتل). لا يجلب الثيم شيئاً؛ يصيّر ما يصله بترتيب التاجر، بما فيه المنتجات غير المتاحة كي تعرض حالة «نفد» صادقة بدل إخفائها.
- الحدّ لكل قسم يأتي من
settings.limit، وإن غاب فمنsettings.count. section.products_totalمجموع أسعار المتاحين منها بالوحدات الصغرى، محسوب على المنصّة لأزرار «اشترِها معاً».- اترك مصدر التصنيف فارغاً لتعود إلى السلوك الافتراضي (المنتجات المميّزة أولاً).
{% if section.products.size > 0 %}
<h2>{{ section.settings.title }}</h2>
<ul>
{% for product in section.products %}
<li><a href="{{ product.url }}">{{ product.name }}</a> {{ product.price | money }}</li>
{% endfor %}
</ul>
{% endif %}الكتل#
الكتلة مثيل مضمّن داخل القسم (شريحة في بانر، سؤال في قائمة أسئلة، عنصر في حزمة). تُعلن أنواعها في blocks داخل تعريف القسم، وتصل مرتّبة في section.blocks بالحقول id وtype وsettings وproducts.
مستند العرض والتثبيت الأول#
config/showcase.json مستند إعدادات كامل يعمل كعرض في معرض الثيمات وكمصدر للتركيب عند التثبيت الأول. تُزال مفاتيح التعليق التالية من المخرجات:
| المفتاح | أين | الأثر عند التثبيت |
|---|---|---|
__demo_only: true |
قسم | يُسقط كلياً (استعجال أو دليل اجتماعي مصطنع يبقى للعرض فقط) |
__install_empty: true |
قسم | يبقى النوع بإعدادات فارغة كعنصر نائب صادق |
__demo_only_keys: ["k"] |
المستند أو قسم | تُزال تلك المفاتيح (بيانات تواصل وهمية، تواريخ مصطنعة) |
__requires: { products?, categories?, images?, promotion?, whatsapp? } |
قسم أو كتلة | يُسقط ما لم يستوفِ المتجر الشرط؛ products لا يتجاوز 12 |
قاعدة الكتالوج الرقيق: تحت 4 منتجات يبقى أول قسم يتطلب منتجات في كل صفحة فقط.
وحدات منصّة التشغيل#
الثيم CSS فقط؛ التفاعل يأتي من منصّة التشغيل بسمات تصريحية:
| السمة | الأثر |
|---|---|
data-dukkan-add-to-cart، data-dukkan-cart-count، data-dukkan-cart-anchor |
الإضافة إلى السلة وشارتها |
data-dukkan-add-many مع data-dukkan-fly-item="<variantId>" |
إضافة حزمة مع أثر الطيران لكل عنصر |
data-dukkan-reveal-item |
كشف عند التمرير؛ تُختم <html> بـ data-dukkan-reveal عند الرغبة بالحركة، ويحصل العنصر على data-dukkan-inview |
data-dukkan-sticky-atc مع data-dukkan-atc-watch |
زر شراء ثابت يظهر عندما يغيب صندوق الشراء |
data-dukkan-to-top |
زر العودة إلى الأعلى |
data-dukkan-scheme-toggle |
تبديل الوضع الليلي؛ صمّم لوحتك تحت [data-scheme="dark"] |
data-dukkan-stock-alert مع data-product-id |
نموذج «أعلمني عند التوفّر» |
data-dukkan-quick-view على رابط صفحة المنتج |
معاينة سريعة؛ يعمل الرابط عادياً بلا JavaScript |
لا تُخفِ محتوى إلا خلف data-dukkan-reveal على الجذر؛ بدونه يجب أن يكون كل شيء مرئياً.