BunStackDocs

Kehittäjille

Malliviite

Viite komponentin omalle HTML:lle ja JS:lle: mallisyntaksi, muuttujat, actionit, puhdistus, JS, rajat ja esimerkit.

Päivitetty viimeksi · 22 min lukuaika

Koodieditorin avaaminen kerrotaan sivulla Oma koodi komponentissa.

Missä: suunnittelutyökalu, komponentin Customize with code › Code, tilassa Advanced. Osio Custom component noudattaa samoja sääntöjä.

Juuri on kaupan

Jokaisella komponentilla on juuri, jonka kauppa piirtää. Mallisi on juuren sisältö.

  • Ylätunnisteen juuri on [data-bs-header]. Kauppa asettaa juureen tilat [data-bs-transparent], [data-bs-scrolled] ja [data-bs-sticky], myös kun ylätunniste on omaa HTML:ääsi.
  • Älä kirjoita malliin omaa <header>-elementtiä. Aloita siitä, mitä sen sisään tulee.
  • CSS:si rajataan juureen. JS:si saa juuren muuttujana root.
  • Custom component -osion juuri on [data-bs-block="<osion-id>"].

Kaikki juuret ovat sivulla Koukut ja CSS-viite.

Mallisyntaksi

Malli on HTML:ää, jossa muuttujat ovat kaksinkertaisissa aaltosulkeissa. Tämä on koko syntaksi.

KirjoitustapaMitä
{{storefront.name}}Arvo, aina HTML-escapattuna. Tuntematon muuttuja antaa tyhjän tekstin.
{{#each nav}} … {{/each}}Toistaa lohkon listan jokaiselle merkinnälle.
{{this}}, {{this.label}}#each-silmukan merkintä tai merkinnän kenttä. Paljas {{label}} haetaan ensin merkinnältä.
{{@index}}, {{@first}}, {{@last}}Laskuri nollasta, ja tosi ensimmäisellä ja viimeisellä kierroksella.
{{#if cart.count}} … {{else}} … {{/if}}Näyttää lohkon, kun arvo on tosi. {{else}} on valinnainen.
{{#unless brand.logoUrl}} … {{/unless}}#if:n vastakohta.
  • Tyhjä teksti, 0, tyhjä lista ja false ovat epätosia.
  • HTML:ää ei voi tulostaa ilman escapausta.
  • Apufunktioita ja sisällytettäviä malleja ei ole.

Rajat

RajaArvo
Mallin pituus200 000 merkkiä
Piirretty HTML200 000 merkkiä
CSS:n pituus200 000 merkkiä
JS:n pituus100 000 merkkiä
Sisäkkäiset lohkot32 tasoa
Askeleet piirtoa kohti50 000
  • Pidempi osa katkaistaan varoituksella, joka kertoo kohdan, esimerkiksi css cut at 200 000 characters.
  • Piirto keskeytyy 50 000 askeleen jälkeen. Silmukka silmukassa ei voi jumittaa kauppaa.
  • Vähintään 33 333 merkin malli piirretään suunnittelutyökalussa kerran ilman dataa. Jos se silloin osuu rajaan, se näkyy kohdassa May cut with some data välilehdellä Code.
  • Kauppa listaa vain sen, minkä sen oma piirto katkaisee.

Virheet ja varoitukset

Malli, jota ei voi lukea, ei piirrä mitään. Tämä koskee esimerkiksi {{#each}}-lohkoa, jota ei koskaan suljeta, tai lohkoa, joka suljetaan väärällä tagilla. Kauppa näyttää silloin vakioulkoasun, ja suunnittelutyökalu näyttää virheen koodin kohdalla.

MissäMitä näet
SuunnittelutyökaluVirheen tai varoituksen punaisella koodin alla.
Kaupan HTML, virhe<!-- bs-component-error: … --> elementin <template data-bs-component-errors> sisällä.
Kaupan HTML, varoitus<!-- bs-component-warning: … --> samassa paikassa. Komponentti piirretään silti.
Katkaistu tuotekortti tai banneridata-bs-component-warning juuressa. Konsoli näyttää syyn kerran tyyliä kohti.

Varoitus voi koskea CSS-sääntöä, jota ei voitu rajata, tai vaihtoehtoa, joka hylättiin.

Muuttujat

Nämä kolme jakavat yhden muuttujajoukon. Osio Custom component saa saman joukon.

MuuttujaTyyppiMitä
storefront.namestringKaupan nimi
storefront.slugstringKaupan slug
storefront.hoststringKaupan julkinen isäntä: oma verkkotunnus, kun se on vahvistettu, muuten bunstack.shop-isäntä
brand.logoUrlstringLogon osoite, tyhjä kun logoa ei ole
brand.footerLogoUrlstringVaalea logo tummille pinnoille. Palautuu logoUrl:iin
brand.logoHeightnumberLogon korkeus pikseleinä (16–96)
brand.taglinestringTagline
brand.copyrightstringCopyright-rivi
nav[]listPääkategoriat: label, href, children[]
nav[].labelstringKategorian nimi
nav[].hrefstringLinkki kategoriaan
nav[].children[]listAlakategoriat, joilla on samat kentät kuin ylätasolla, label ja href. Käy ne läpi: {{#each this.children}}{{this.label}}{{/each}}
pages[]listValikossa näytettävät sivut: label, href
cart.countnumberAina 0, kun sivu piirretään, koska ostoskori on selaimessa. Kirjoita se elementtiin <span data-bs-cart-count>. Kauppa pitää sen elementin ajan tasalla
social[]listSome-linkit: key, label, href
contact.emailstringYhteyssähköposti, tyhjä kun ei asetettu
contact.phonestringPuhelin, tyhjä kun ei asetettu
currency.codestringValittu valuutta
currency.options[]listValuutat, joissa kauppa myy: code, label. Tyhjä kävijälle maasta, joka on kohdassa Not sold to valinnalla Prices hidden
search.hrefstringLinkki hakusivulle
menu.links[]listValikon isot linkit järjestyksessä, kohdasta Menu panel › Links: label, href, children[], category, draft, products[]
menu.links[].labelstringLinkin teksti: oma tekstisi, muuten kategorian tai sivun nimi
menu.links[].hrefstringMihin linkki vie
menu.links[].children[]listKategorialinkin alakategoriat: label, href. Tyhjä sivulle tai osoitteelle
menu.links[].categorystringKategorian id kategorialinkille, muuten tyhjä
menu.links[].draftbooleanSivu ei ole vielä live. Vain suunnittelutyökalun työtilassa: kauppa ei näytä linkkiä
menu.links[].products[]listLinkin kortit: kategorian tuotteet, nostetut ensin ja alakategoriat mukana, muuten oletuskortit. Kortin kentillä
menu.secondary[]listValikon pienet linkit järjestyksessä: label, href
menu.headingstringTuotteiden yläpuolinen otsikko (Heading over the products), tyhjä kun sitä ei ole
menu.products[]listOletuskortit: nostetut tuotteet järjestyksessä, kortin kentillä. Tyhjä, kunnes valikko on hakenut ne
i18n.menustring"Valikko" kaupan kielellä
i18n.closestring"Sulje"
i18n.searchstring"Haku"
i18n.searchPlaceholderstringHakukentän paikkamerkki
i18n.cartstring"Ostoskori"
i18n.wishliststring"Toivelista"
i18n.shopstring"Kauppa"
i18n.contactstring"Yhteystiedot"
i18n.ordersstring"Seuraa tilaustasi"

Product card

Yksi malli korttia kohti. Se piirretään jokaiselle ruudukon tuotteelle.

MuuttujaTyyppiMitä
product.idstringTuotteen id, data-bs-product-id:tä varten
product.titlestringOtsikko
product.hrefstringLinkki tuotesivulle
product.pricestringHinta, muotoiltuna asiakkaan valuutassa. Kun variantit maksavat eri verran, se on niistä alin, ja sen edessä on ruotsinkielisessä kaupassa "från" ja muissa "from". Tyhjä ilman hintaa
product.priceAmountstringSama hinta ilman sanaa "från" tai "from". Tyhjä ilman hintaa
product.priceVariesbooleanTosi, kun ostettavissa olevat variantit maksavat eri verran. Hinta on silloin niistä alin
product.compareAtPricestringAiempi hinta: alin hinta hinnanalennusta edeltäneiden 30 päivän ajalta, muotoiltuna. Tyhjä kun kauppa ei ilmoita alennusta
product.currencystringValuuttakoodi
product.imagestringEnsimmäisen kuvan osoite, tyhjä kun kuvaa ei ole
product.imageAltstringKuvan alt-teksti
product.badgestringAlennusmerkin teksti, tyhjä kun merkkiä ei ole
product.skustringTyhjä. Kortin tuotetiedoissa ei ole tuotenumeroa
product.inStockbooleanKortilla tosi, varasto tarkistetaan kassalla. Epätosi kävijälle maasta, joka on kohdassa Not sold to, koska kauppa ei myy sinne. Käytä sitä ostopainikkeeseen, älä loppuunmyyty-tekstiin. Valinnalla Prices hidden myös price, priceAmount, compareAtPrice ja badge ovat tyhjiä
product.variantIdstringTyhjä. Add-to-cart kortilta lisää tuotteen ainoan variantin ostoskoriin tai avaa tuotesivun, kun variantteja on useita
product.metastringTagirivi otsikon alla
storefront.namestringKaupan nimi
storefront.slugstringKaupan slug
storefront.hoststringKaupan julkinen isäntä: oma verkkotunnus, kun se on vahvistettu, muuten bunstack.shop-isäntä
brand.logoUrlstringLogon osoite, tyhjä kun logoa ei ole
brand.footerLogoUrlstringVaalea logo tummille pinnoille. Palautuu logoUrl:iin
brand.logoHeightnumberLogon korkeus pikseleinä (16–96)
brand.taglinestringTagline
brand.copyrightstringCopyright-rivi

Product page

Galleria ja ostopaneeli, piirrettynä näytettävälle variantille. Kun asiakas valitsee toisen variantin select-variant-actionilla, malli piirretään uudelleen. Hinta, tuotenumero, varastorivi, product.variantId ja jokainen selected seuraavat mukana. Muu osa sivusta on vakiosivua: tiedot, arvostelut ja liittyvät tuotteet. Mallin alle kauppa piirtää tuotteen kysymykset, rivin ostoskorin lisävalinnoista ja ruudun Optional add-ons. Mallin add-to-cart lisää asiakkaan rastittamat lisävalinnat ja pysähtyy tyhjään pakolliseen kysymykseen kuten vakiopainike.

MuuttujaTyyppiMitä
product.idstringTuotteen id, data-bs-product-id:tä varten
product.titlestringOtsikko
product.hrefstringLinkki tuotesivulle
product.descriptionstringKoko kuvaus tekstinä ilman muotoilua. Tyhjä kun kuvausta ei ole
product.paragraphs[]listKuvauksen kappaleet, otsikot ja luettelot tekstinä, yksi merkkijono lohkoa kohti
product.shortDescriptionstringLyhyt kuvaus tekstinä. Tyhjä kun kuvausta ei ole
product.introstringTeksti hinnan vieressä: lyhyt kuvaus, muuten ensimmäinen kappale lyhennettynä
product.pricestringNäytetyn variantin hinta, muotoiltuna asiakkaan valuutassa. Tyhjä ilman hintaa
product.compareAtPricestringAiempi hinta: alin hinta hinnanalennusta edeltäneiden 30 päivän ajalta, muotoiltuna. Tyhjä kun kauppa ei ilmoita alennusta
product.currencystringValuuttakoodi
product.imagestringEnsimmäisen kuvan osoite (näytetyn variantin oma kuva ensin), tyhjä kun kuvaa ei ole
product.imageAltstringEnsimmäisen kuvan alt-teksti
product.images[]listKaikki kuvat: url, alt, caption (kauppiaan oma teksti, tyhjä kun sitä ei ole)
product.badgestringAlennusmerkin teksti, tyhjä kun merkkiä ei ole
product.skustringNäytetyn variantin tuotenumero, tyhjä kun sitä ei ole
product.stockStatusstringin_stock, preorder tai out_of_stock, näytetylle variantille
product.stockLabelstringVarastorivin teksti kaupan kielellä ("Vain 3 jäljellä", "Ennakkotilaus · lähetetään 10 päivässä")
product.inStockbooleanLisää ostoskoriin toimii: saatavilla olevaa varastoa tilassa Automatic, tai tila In stock (manual) tai Preorder. Ei koskaan tilassa Out of stock eikä koskaan kävijälle maasta, joka on kohdassa Not sold to. Käytä sitä ostopainikkeeseen ja muuttujaa stockStatus varastotekstiin. Valinnalla Prices hidden price, compareAtPrice, badge ja varianttien price ovat tyhjiä
product.variantIdstringNäytetty variantti, data-bs-variant-id:tä varten add-to-cart-toiminnossa. Tyhjä ilman variantteja
product.variantTitlestringNäytetyn variantin otsikko, tyhjä ilman variantteja
product.variants[]listKaikki variantit: id, title, sku, price, stockStatus, stockLabel, inStock, selected, options[] (name, value)
product.options[]listVaihtoehtoryhmät valitsimen järjestyksessä: name, label (nimi niin kuin valitsin sen kirjoittaa, esimerkiksi Number of balls nimestä Number-of-balls), values[]
product.options[].values[]listYksi arvo: value, selected, available, variantId (sen, jonka select-variant valitsee arvolle)
product.categories[]listKategoriat, joissa tuote on, ensimmäinen = murupolku: name, slug, href
product.tags[]listTuotteen tagit, merkkijonoina
product.metastringTagirivi (ensimmäiset tagit), tyhjä kun tageja ei ole
product.properties[]listSivun näyttämät ominaisuudet ryhmien järjestyksessä: group (tyhjä ilman ryhmää), label, value (kuten kauppa sen kirjoittaa), values[] (arvon osat), display (bar, chips, table tai badge), numeric, percent (palkin täyttö asteikollaan, 0–100). Filter only ja Hidden eivät ole mukana
storefront.namestringKaupan nimi
storefront.slugstringKaupan slug
storefront.hoststringKaupan julkinen isäntä: oma verkkotunnus, kun se on vahvistettu, muuten bunstack.shop-isäntä
brand.logoUrlstringLogon osoite, tyhjä kun logoa ei ole
brand.footerLogoUrlstringVaalea logo tummille pinnoille. Palautuu logoUrl:iin
brand.logoHeightnumberLogon korkeus pikseleinä (16–96)
brand.taglinestringTagline
brand.copyrightstringCopyright-rivi
currency.codestringValittu valuutta
cart.countnumberAina 0, kun sivu piirretään. Kirjoita se elementtiin <span data-bs-cart-count>, kuten ylätunnisteessa
i18n.addToCartstring"Lisää ostoskoriin" kaupan kielellä
i18n.chooseVariantstring"Valitse variantti"
i18n.inStockstring"Varastossa"
i18n.outOfStockstring"Loppuunmyyty"
i18n.preorderstring"Ennakkotilaus"
i18n.priceOnRequeststring"Hinta pyynnöstä"
i18n.vatstring"Sis. alv" tai "Ilman alv", kaupan hinnoittelun mukaan
i18n.wishliststring"Tallenna toivelistalle"
i18n.homestring"Etusivu", murupolun ensimmäinen osa

Tuotekuvat tuotesivulla. Jos tuotesivu on omaa HTML:ää, sen malli piirtää gallerian itse, eikä gallerian ulkoasua piirretä lainkaan. Koodieditori, kaupan raportti ja työtila kertovat sen.

MuuttujaTyyppiMitä
images[]listKaikki kuvat, näytetyn variantin oma ensin: url, alt, caption (kauppiaan oma teksti, tyhjä kun sitä ei ole)
imagestringEnsimmäisen kuvan osoite, tyhjä kun kuvaa ei ole
imageAltstringEnsimmäisen kuvan alt-teksti
countnumberKuvien määrä
titlestringTuotteen otsikko
product.idstringTuotteen id, data-bs-product-id:tä varten toggle-wishlist-toiminnossa
product.titlestringOtsikko
product.hrefstringLinkki tuotesivulle
storefront.namestringKaupan nimi
storefront.slugstringKaupan slug
storefront.hoststringKaupan julkinen isäntä: oma verkkotunnus, kun se on vahvistettu, muuten bunstack.shop-isäntä
brand.logoUrlstringLogon osoite, tyhjä kun logoa ei ole
brand.footerLogoUrlstringVaalea logo tummille pinnoille. Palautuu logoUrl:iin
brand.logoHeightnumberLogon korkeus pikseleinä (16–96)
brand.taglinestringTagline
brand.copyrightstringCopyright-rivi
i18n.imagesstring"Tuotekuvat" kaupan kielellä
i18n.previousstring"Edellinen kuva"
i18n.nextstring"Seuraava kuva"
i18n.noImagestring"Ei kuvaa"
i18n.wishliststring"Tallenna toivelistalle"

Category

Kokoelmasivu ja sen listaamat tuotteet: kategoria, All products tai hakutulokset. Malli saa sivun suodattimet datana kohdassa filters[]: jokainen ryhmä arvoineen, määrineen, rasteineen ja linkkeineen, jotka rastittavat arvon tai poistavat rastin. Kauppa ei lisää suodattimia mallin omaan HTML:ään. Malli listaa sen, mitä osoitteen parametrit (?sort=…&f.…&category=…) määräävät. Malli korvaa Collection-sivun osiot, tuoteruudukko mukaan lukien. Sivun oma CSS (Collection-sivun välilehti Code) on edelleen voimassa.

MuuttujaTyyppiMitä
category.idstringKategorian id
category.namestringKategorian nimi
category.descriptionstringKuvaus, tyhjä kun kuvausta ei ole
category.slugstringKategorian slug
category.hrefstringLinkki kategoriaan
category.imagestringKategoriakuvan osoite, tyhjä kun kuvaa ei ole
products[]listListatut tuotteet asiakkaan suodattimien ja lajittelun jälkeen. Yksi merkintä tuotetta kohti kortin kentillä: id, title, href, price, priceAmount, priceVaries, compareAtPrice, currency, image, imageAlt, badge, sku, inStock, variantId, meta. Kävijälle maasta, joka on kohdassa Not sold to, inStock on epätosi, ja valinnalla Prices hidden price, priceAmount, compareAtPrice ja badge ovat tyhjiä
countnumberListattujen tuotteiden määrä (suodattimien jälkeen)
totalnumberTuotteiden määrä kategoriassa
emptybooleanTosi kun mitään ei listata
filters[]listSivun suodatinryhmät järjestyksessä. Sivulla All products ja hakutuloksissa Category-ryhmä on ensin
filters[].labelstringRyhmän nimi
filters[].paramstringOsoiteparametri, jonka arvot kirjoittavat: f. tai category
filters[].selectedCountnumberRyhmän rastitettujen arvojen määrä
filters[].values[]listRyhmän arvot järjestyksessä
filters[].values[].labelstringArvon näkyvä teksti (kategorian nimi)
filters[].values[].valuestringArvo siinä muodossa, jonka linkki kirjoittaa
filters[].values[].countnumberSivun tuotteet, joilla arvo on
filters[].values[].depthnumberAlakategorian syvyys Category-ryhmässä, muuten 0
filters[].values[].selectedbooleanAsiakkaan rastittama
filters[].values[].hrefstringSivu, jolla arvo on rastitettu tai rasti poistettu, muut rastit säilyvät
filterednumberAsiakkaan rastittamat arvot
clearHrefstringSivu ilman rasteja
stickybooleanFilters stay in view on päällä, ja sivulla on suodattimia
storefront.namestringKaupan nimi
storefront.slugstringKaupan slug
storefront.hoststringKaupan julkinen isäntä: oma verkkotunnus, kun se on vahvistettu, muuten bunstack.shop-isäntä
brand.logoUrlstringLogon osoite, tyhjä kun logoa ei ole
brand.footerLogoUrlstringVaalea logo tummille pinnoille. Palautuu logoUrl:iin
brand.logoHeightnumberLogon korkeus pikseleinä (16–96)
brand.taglinestringTagline
brand.copyrightstringCopyright-rivi
i18n.shopstring"Kauppa" kaupan kielellä, murupolun ensimmäinen osa
i18n.productsstring"Tuotteet"
i18n.emptystring"Tässä kategoriassa ei ole vielä tuotteita."
i18n.noMatchstring"Yksikään tuote ei vastaa suodattimiasi."
i18n.filtersstring"Suodattimet"
i18n.clearstring"Tyhjennä suodattimet"

Osion omat asetukset.

MuuttujaTyyppiMitä
headingstringOtsikko
subtitlestringAlaotsikko
imageUrlstringKuvan osoite
imageAltstringKuvan alt-teksti
ctaLabelstringPainikkeen teksti
ctaHrefstringPainikkeen linkki
alignstringleft tai center
valignstringtop, center tai bottom
sizestringxs … xl tai screen
bleedstringcontained tai full
ctaStylestringprimary, light tai outline
storefront.namestringKaupan nimi
storefront.slugstringKaupan slug
storefront.hoststringKaupan julkinen isäntä: oma verkkotunnus, kun se on vahvistettu, muuten bunstack.shop-isäntä
brand.logoUrlstringLogon osoite, tyhjä kun logoa ei ole
brand.footerLogoUrlstringVaalea logo tummille pinnoille. Palautuu logoUrl:iin
brand.logoHeightnumberLogon korkeus pikseleinä (16–96)
brand.taglinestringTagline
brand.copyrightstringCopyright-rivi

Kirjoita otsikko <h1>-elementtinä, kun banneri on sivun otsikkolohko. Silloin se on sivun otsikko. Jos mallista puuttuu <h1>, kauppa lisää bannerin jälkeen piilotetun sivun otsikon, kun banneri on sivun otsikkolohko. Banneri on otsikkolohko, kun se on sivun ensimmäinen banneri tai hero eikä mikään tason 1 otsikko-osio ota otsikkoa.

Actionit

HTML:lläsi ei ole omia tapahtumankäsittelijöitä. Lisää elementtiin data-bs-action, niin kauppa hoitaa loput napsautuksella. Kauppa käyttää samoja kuuntelijoita kuin vakio-HTML:ssä. Attribuutti voi olla missä tahansa elementissä, myös <svg>-elementissä.

ActionVaaditaanValinnainenMitä
data-bs-action="open-cart"––Avaa ostoskorin kaupan valinnan Checkout › Cart mukaan: paneelin tai ostoskorisivun
data-bs-action="open-search"––Avaa hakukentän
data-bs-action="open-menu"––Avaa valikkopaneelin
data-bs-action="close-menu"––Sulkee valikkopaneelin
data-bs-action="add-to-cart"data-bs-product-iddata-bs-variant-id, data-bs-quantityLisää tuotteen ostoskoriin
data-bs-action="toggle-wishlist"data-bs-product-id–Lisää tuotteen toivelistalle tai poistaa sen
data-bs-action="select-variant"data-bs-variant-id–Valitsee variantin tuotesivulla. Hinta, varastorivi, product.variantId ja jokainen selected seuraavat mukana. Vain tuotesivun omassa mallissa
data-bs-action="open-cookie-settings"––Avaa evästeasetukset, saman ikkunan kuin vakioalatunnisteen linkki
data-bs-action="set-currency"data-bs-currency–Vaihtaa valuutan attribuutin koodiin, kuten data-bs-currency="EUR". Koodit ovat muuttujassa currency.options[]
data-bs-action="subscribe-newsletter"data-bs-newsletter–Tilaa uutiskirjeen kentän name="email" osoitteelle. Laita action <form>-elementtiin tai sen lähetyspainikkeeseen
  • Jos vaadittu attribuutti puuttuu, napsautus ei tee mitään.
  • data-bs-quantity-arvon on oltava positiivinen kokonaisluku. Muu luetaan arvona 1.
  • Action, jota ei ole tai jolta puuttuu vaadittu attribuutti, antaa varoituksen mallin kääntämisen yhteydessä. Varoitus näkyy koodin kohdalla ja kaupan HTML:ssä muodossa <!-- bs-component-warning: … -->.
  • subscribe-newsletter vaatii lomakkeen, jossa on data-bs-newsletter ja kenttä name="email". Se ajetaan, kun lomake lähetetään, joten Enter kentässä toimii. Osoite saa saman tarkistuksen ja saman vastauksen kuin vakioalatunnisteessa.

add-to-cart ilman data-bs-variant-id:tä, esimerkiksi kortilla, kysyy kaupalta tuotteesta:

Tuotteella onKauppa
Ei varianttejaLisää tuotteen ostoskoriin
Yksi variantti varastossaLisää variantin ostoskoriin
Useita variantteja tai yksi variantti, joka on loppu tai ennakkotilattavaAvaa tuotesivun

Koukut

Koukut ovat kaupan HTML:n attribuutteja, joihin CSS ja JS kohdistuvat: komponentin juuri, sisäelementit ja juuren tilat. Kaikki koukut komponenteittain, sivun koukut ja tokenien CSS:n säännöt ovat sivulla Koukut ja CSS-viite.

Puhdistus

Piirretty malli puhdistetaan ennen kuin se päätyy sivulle, samalla tavalla palvelimella ja selaimessa.

RyhmäSäilytettävät elementit
Rakennediv, section, header, footer, nav, aside, article, ul, ol, li, p, h1–h6, dl, dt, dd, details, summary, figure, figcaption, blockquote, address
Tekstispan, strong, em, b, i, u, s, small, sup, sub, mark, cite, abbr, time, br, hr, wbr
Linkit ja kuvata, img, picture, source
Lomakkeetbutton, input, label, form
SVGsvg, g, path, circle, ellipse, rect, line, polyline, polygon

Säilytettävät attribuutit:

  • kaikissa elementeissä: class, id, title, role, tabindex, lang, dir, hidden, style, translate, kaikki aria-*, kaikki data-bs-* ja data-footer-*
  • linkeissä: href, target, rel
  • kuvissa: src, srcset, sizes, alt, width, height, loading
  • painikkeissa ja kentissä: type, name, value, placeholder, disabled
  • form-elementissä: action, kun se on kaupan polku, esimerkiksi /search, ja method, kun se on get tai post
  • SVG:ssä: viewBox, fill, stroke, stroke-width, d, points ja muut piirtoattribuutit

Mitä poistetaan:

  • script, style, iframe, object, embed, noscript, template, textarea, select, video, audio, canvas, dialog, math ja title koko sisältöineen
  • kaikki on*-attribuutit ja kaikki kommentit
  • muut data-*-attribuutit kuin data-bs-* ja data-footer-*
  • osoitteet, jotka eivät ole suhteellisia, https:, http:, mailto: tai tel:, paitsi data:-kuvat img-elementissä
  • action, joka osoittaa kaupan ulkopuolelle

Elementti, jota ei ole listassa, poistetaan, mutta sen sisältö säilyy. style="…" puhdistetaan kuten muu CSS. Linkeissä säilyvät target="_blank", joka saa rel="noopener", sekä target="_self". Muut target-arvot poistetaan. Avoimet elementit suljetaan lopussa, joten tulos on aina tasapainoista HTML:ää.

Luokat ja koot

Vakio-HTML:ssä on muutama Tailwind-luokka, esimerkiksi flex, items-center ja gap-4. Suunnittelutyökalu ei käännä mallistasi uusia luokkia. Luokka, jota kaupassa ei jo ole, ei tee mitään. Aseta koko ja välit välilehdellä Design, kohdassa Code › CSS koukkuihin tai elementin style-attribuuttina.

CSS

Code-välilehden CSS koskee vain komponenttia. Miten valitsimet rajataan juureen, mitä puhdistus poistaa ja miten lataat omat fontit, kerrotaan sivulla Koukut ja CSS-viite.

px ja rem: katso Oma CSS ja head-koodi.

JS

  • JS ajetaan kerran sivun latausta kohti, kun sivu on latautunut, jokaisella sivulla, jolla komponentti on.
  • Se saa komponentin juurielementin muuttujana root. Jos komponenttia ei ole sivulla, sitä ei ajeta.
  • Valikkopaneelin juuri on olemassa vain, kun paneeli on auki. Sen JS ajetaan joka kerta, kun paneeli avataan, uutta juurta vasten. Sido kuuntelijat muuttujaan root, ei document-olioon.
  • Virhe, myös syntaksivirhe, kirjataan selaimen konsoliin tyylin nimellä. Se ei pysäytä sivua eikä muiden komponenttien JS:ää.
  • Koodi ajetaan myös työtilassa. Kytkin Run JS in the builder keskeyttää sen siellä istunnon ajaksi. Kauppa ja Preview (⌘P) ajavat sen tavalliseen tapaan.
root.querySelectorAll('[data-bs-header-icons] a').forEach((a) => {
  a.addEventListener('mouseenter', () => a.classList.add('is-hot'));
});

Tuotekortti on sivulla monta kertaa. root on silloin ensimmäinen kortti. Käytä kaikille document.querySelectorAll('[data-bs-card]').

Sivun JS välilehdellä Code ajetaan samalla tavalla, ilman muuttujaa root. Se, mitä kirjoitat Collection-sivulle, koskee kaikkia kategoriasivuja.

Esimerkki: navbar Classic-kaupassa

Tavoite on täysleveä ylätunniste. Se on läpinäkyvä hero-kuvan päällä valkoisella logolla ja valkoisilla kuvakkeilla, ja valkoinen, kun sivua on vieritetty 24 px. Oikealla on neljä 30 px:n kuvaketta: haku, toivelista, ostoskori ja valikko. Suurin osa on säätimiä. Loput on kuusi riviä CSS:ää.

Säätimet komponenttipaneelissa kohdassa Header:

  1. Vaihda etusivun tekstihero Image banner -osioon, jonka Width on täysi ja kuva tumma.
  2. Valitse Look: Icons + panel.
  3. Aseta Options: Sticky päälle, Transparent over hero päälle, Menu label pois, Search päälle, Cart päälle, Announcement bar pois.
  4. Valitse kohdassa Content musta logo kenttään Logo korkeudella 40. Valitse valkoinen kenttään Light logo.
  5. Tarkista, että Theme › Colours › Header text over hero on valkoinen.

Kytke Advanced päälle, paina Customize with code ja kirjoita kohtaan Code › CSS:

[data-bs-header] { padding: 16px; }
@media (min-width: 768px) { [data-bs-header] { padding: 32px; } }
[data-bs-header-inner] { max-width: none; }
[data-bs-header-icons] { gap: 16px; }
[data-bs-header-icons] a, [data-bs-header-icons] button { opacity: 1; }
[data-bs-header-icons] svg { width: 30px; height: 30px; stroke-width: 1.6; }

Paina Save as new style ja anna tyylille nimi "Oma navbar". Tyyli on nyt kohdassa Your header styles kaikissa workspacen kaupoissa. Logot kuuluvat teemaan, ja ne asetetaan kohdassa Content jokaisessa kaupassa.

Sama navbar omana HTML:nä

Avaa Code › HTML ja paina Start from the standard markup. Kenttä täyttyy vakioulkoasun HTML:llä. Alla oleva malli on sama navbar käsin kirjoitettuna. Se käyttää samoja sisäisiä koukkuja, joten yllä oleva CSS toimii sellaisenaan. Hampurilaisvalikko avaa kaupan vakiopaneelin, jossa on oma Close-painike ja joka sulkeutuu Escillä.

<div data-bs-header-inner>
  <a href="/" aria-label="{{storefront.name}}">
    <img src="{{brand.logoUrl}}" alt="{{storefront.name}}" height="{{brand.logoHeight}}" class="logo-dark">
    <img src="{{brand.footerLogoUrl}}" alt="" height="{{brand.logoHeight}}" class="logo-light">
  </a>
  <div data-bs-header-icons>
    <button type="button" data-bs-action="open-search" aria-label="{{i18n.search}}">
      <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" aria-hidden="true"><circle cx="11" cy="11" r="7"/><path d="m20 20-3.5-3.5"/></svg>
    </button>
    <a href="/wishlist" data-bs-wishlist-icon aria-label="{{i18n.wishlist}}">
      <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" aria-hidden="true"><path d="M20.8 4.6a5.5 5.5 0 0 0-7.8 0L12 5.7l-1-1.1a5.5 5.5 0 0 0-7.8 7.8L12 21l8.8-8.6a5.5 5.5 0 0 0 0-7.8z"/></svg>
    </a>
    <button type="button" data-bs-action="open-cart" data-bs-cart-icon aria-label="{{i18n.cart}}">
      <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" aria-hidden="true"><path d="M6 6h15l-1.5 9h-12z"/><circle cx="9" cy="20" r="1"/><circle cx="18" cy="20" r="1"/><path d="M6 6 5 3H2"/></svg>
      <span data-bs-cart-count>{{cart.count}}</span>
    </button>
    <button type="button" data-bs-action="open-menu" data-bs-menu-button aria-label="{{i18n.menu}}">
      <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" aria-hidden="true"><path d="M3 6h18M3 12h18M3 18h18"/></svg>
    </button>
  </div>
</div>

Vakio-HTML:ssä kauppa vaihtaa logon itse. Omassa mallissa molemmat kuvat ovat HTML:ssä, ja CSS valitsee juuren tilan perusteella:

[data-bs-header-inner] { display: flex; align-items: center; justify-content: space-between; }
[data-bs-header-icons] { display: flex; align-items: center; }
.logo-light { display: none; }
[data-bs-transparent]:not([data-bs-scrolled]) .logo-dark { display: none; }
[data-bs-transparent]:not([data-bs-scrolled]) .logo-light { display: inline; }

Valikkopaneeli omana HTML:nä

Kauppa piirtää paneelin juuren [data-bs-menu] ja avaa sen open-menu-actionilla. Malli käy läpi valikon linkit kohdasta Menu panel › Links, isot alakategorioineen ja sitten pienet:

<nav aria-label="{{i18n.menu}}">
  <ul>
    {{#each menu.links}}
    <li>
      <a href="{{this.href}}">{{this.label}}</a>
      {{#if this.children}}
      <ul>{{#each this.children}}<li><a href="{{this.href}}">{{this.label}}</a></li>{{/each}}</ul>
      {{/if}}
    </li>
    {{/each}}
    {{#each menu.secondary}}<li><a href="{{this.href}}">{{this.label}}</a></li>{{/each}}
  </ul>
  {{#if contact.email}}<p data-bs-menu-contact><a href="mailto:{{contact.email}}">{{contact.email}}</a></p>{{/if}}
  <button type="button" data-bs-action="close-menu">{{i18n.close}}</button>
</nav>

open-search avaa kaupan hakukentän kerroksena ylätunnisteen ja paneelin päälle. Jos HTML:ssäsi on elementti [data-bs-search-slot], hakukenttä piirretään sen sisään. Oma hakulomake toimii myös:

<form action="/search" method="get" role="search">
  <input type="search" name="q" placeholder="{{i18n.searchPlaceholder}}" aria-label="{{i18n.search}}">
  <button type="submit">{{i18n.search}}</button>
</form>

Tuotekortti omana HTML:nä

Kauppa piirtää kortin juuren [data-bs-card]. Malli on sen sisäosa. Painike saa tuotteensa attribuuteista.

<a href="{{product.href}}">
  <div data-bs-card-media>
    {{#if product.image}}<img src="{{product.image}}" alt="{{product.imageAlt}}" loading="lazy">{{/if}}
    {{#if product.badge}}<span class="badge">{{product.badge}}</span>{{/if}}
  </div>
  <div data-bs-card-body>
    <h3 data-bs-card-title>{{product.title}}</h3>
    <p data-bs-card-price>{{#if product.compareAtPrice}}<s>{{product.compareAtPrice}}</s> {{/if}}{{product.price}}</p>
  </div>
</a>
<button type="button" data-bs-action="add-to-cart" data-bs-product-id="{{product.id}}">Add to cart</button>