Sayfa şablonları

Sayfanın iskeleti JSON şablondur — hangi bölümler, hangi sırayla, hangi ayarlarla. Tema varsayılanını getirir, satıcı düzenler.

Bir sayfa, temanın bölümlerinden kurulur. Hangi bölümlerin hangi sırayla ve hangi ayarlarla çizileceğini sablonlar/<ad>.json dosyası söyler. Tema her sayfa türü için varsayılan şablonu getirir; satıcı düzenleyicide değiştirdiğinde mağazaya kendi kopyası kaydedilir, temanın dosyası değişmez.

sablonlar/ana-sayfa.json
{
  "bolumler": {
    "giris": {
      "tur": "giris",
      "ayarlar": { "layout": "overlay", "interval": 6 },
      "bloklar": {
        "slayt-1": { "tur": "slide", "ayarlar": { "title": "Yeni sezon", "subtitle": "Yüzde 20 indirim" } },
        "slayt-2": { "tur": "slide", "ayarlar": { "title": "Ücretsiz kargo" } }
      },
      "blok_sira": ["slayt-1", "slayt-2"]
    },
    "yeni-urunler": { "tur": "urun-seridi", "ayarlar": { "heading": "Yeni gelenler", "per_view": 4 } }
  },
  "sira": ["giris", "yeni-urunler"]
}
AlanAnlamı
bolumlerKimlik → bölüm. Kimlik şablon içinde benzersiz (harf, rakam, -, _; en çok 64).
bolumler.*.turBölüm dosyasının adı: "giris" → bolumler/giris.liquid.
bolumler.*.ayarlarBölümün şemasındaki ayarlar. Verilmeyen ayar şemadaki default değerini alır.
bolumler.*.bloklar / blok_siraKimlik → blok (tur şemadaki blok türü) ve blokların sırası.
bolumler.*.gizlitrue ise bölüm çizilmez (blokta da aynı).
siraBölümlerin sayfadaki sırası. bolumlerdeki her kimlik bir kez geçer.

Sayfada bölümler arasında sarmalayıcı yoktur: her bölüm yalnız kendi kutusunda çizilir (<div class="mk-tema" data-mk-tema="<tür>" id="mk-tema-<kimlik>">).

Sayfa türleri

Dosyanın adı sayfa türüdür.

ŞablonSayfaŞablona gelen veri
ana-sayfa.jsonAna sayfa—
urun.jsonÜrün sayfasıproduct, recommendations, related
liste.jsonKategori, koleksiyon ve tüm ürünlercollection, categories
sayfa.jsonİçerik sayfası (Hakkımızda, yasal metinler…)page
arama.jsonArama sonuçlarıarama, collection (sonuç varsa)
sepet.jsonSepet sayfasısepet.adet, sepet.bos, sepet.uye
404.jsonBulunamayan sayfa—

Hesap ve ödeme sayfaları platformundur, şablonla değişmez. Ödeme ve sepet mantığı her zaman platformda kalır; tema düzeni kurar, satırları ve özeti adalarla yerleştirir:

bolumler/sepet-icerik.liquid
{%- if sepet.bos -%}
  <p {{ section | duzenle: 'bos_metin' }}>{{ section.settings.bos_metin }}</p>
{%- else -%}
  <div class="sepet">
    <div>{% ada 'sepet-giris' %}{% endada %}{% ada 'sepet-urunleri' %}{% endada %}</div>
    <aside>{% ada 'sepet-ozeti' %}{% endada %}</aside>
  </div>
{%- endif -%}

Arama şablonunda arama nesnesi: terim, sayi (bulunan ürün), kategoriler, koleksiyonlar, sayfalar (eşleşen bağlantılar, { title, url }), populer ({ terim, url }). Sonuçlar liste sayfasıyla aynı collection nesnesidir; liste bölümlerin arama sayfasında da çalışır.

Bölüm grupları

Üst kısım (header) ve alt kısım (footer) her sayfada aynıdır; şablon gibi yazılır ama gruplar/ altındadır: gruplar/ust.json, gruplar/alt.json. Sayfa, üst grup + sayfanın şablonu + alt grup olarak çizilir. Tema grup getirmezse platformun header ve footer'ı kullanılır.

Üst kısımda arama, sepet, hesap, dil ve para birimi adaları çalışır. Alt kısımda alt_sayfalar satıcının "Footer'da göster" dediği sayfalardır ({ title, url }); mesafeli satış ve diğer yasal bağlantılar şeridi her zaman platformun, temanın altına eklenir.

Bir bölüm yalnız belli yerlerde anlamlıysa şemasında söyle; düzenleyici onu başka yere eklettirmez, yükleme de reddeder:

{ "name": "Üst menü", "enabled_on": { "groups": ["ust"] } }
AlanDeğer
enabled_onYalnız bu yerlerde: templates (sayfa türleri) ve / veya groups (ust, alt); "*" hepsi.
disabled_onBu yerler dışında her yerde. enabled_on ile birlikte kullanılmaz.

İkisi de yoksa bölüm her şablona ve her gruba konabilir.

Özel şablonlar

Aynı türün ikinci bir düzeni: urun.hediye.json, liste.kampanya.json, sayfa.genis.json. Satıcı ürün, kategori ya da sayfa ayarlarındaki Şablon seçicisinden birini atar; atanmamış kayıt türün şablonunu kullanır. Atanan şablon temada yoksa (tema değişti) sayfa türün şablonuyla çizilir. Ek: küçük harf, rakam ve -, en çok 40 karakter.

Bölüm çizim ucu

Sayfayı yenilemeden bir bölümü yeniden çizdirmek için (filtre, sekme, sepet sonrası güncelleme):

varliklar/tema.js
const r = await fetch(`/api/tema/bolumler?yol=${encodeURIComponent(location.pathname)}&kimlik=one-cikanlar`)
const { bolumler } = await r.json()
if (bolumler['one-cikanlar']) {
  const kutu = document.getElementById('mk-tema-one-cikanlar')
  kutu.innerHTML = new DOMParser().parseFromString(bolumler['one-cikanlar'], 'text/html').body.firstElementChild.innerHTML
}

kimlik virgülle en çok 25 bölüm; yanıtta her biri bölümün kutusuyla HTML (null: o sayfada yok). Bölüm sayfanın bağlamıyla çizilir (ürün sayfasında ürün). Bugün ana sayfa, ürün, içerik sayfası ve üst / alt grup desteklenir. Düzenleyici de ayarı değişen bölümü bu uçla yeniler; bölüm yeniden çizilince tema JS'ine mk:bolum:yuklendi olayı gelir (düzenleyici sözleşmesi).

Sınırlar

Sınır
Şablon ya da grup başına bölüm25
Bölüm başına blok (iç içe dahil)50
İç içe blok katı8

Yüklemede her şablon denetlenir: ad bir sayfa türü olmalı, tur değerleri pakette bulunan bölümler ve o bölümün şemasındaki bloklar olmalı, max_blocks ve blok limit aşılmamalı. Hatalar dosya adıyla döner.

404 şablonu her istekte de hazırlanır (bulunamayan sayfa anında gösterilebilsin diye); küçük tut, ürün listesi gibi veri isteyen bölüm koyma.

Bu sayfada