Každý web na Shopece nebo Webicu má svůj vzhled definovaný tématem (Theme), který obsahuje všechny potřebné frontendové assety (JS, CSS, obrázky, fonty, alternující šablony...)
settings.json
Základem tématu je JSON s nastavením, který obsahuje následující klíče:
- pages - nastavení viditelnosti (pozice) komponent pro jednotlivé typy stránek
- templates - šablony nahrazující defaultní šablony rendererů
- meta-tags - HTML meta tagy do hlavičky webu
- java-script - seznam javascriptů, které budou linkovány z hlavičky
- css - seznam CSS souborů, které budou linkovány z hlavičky
- css-top - seznam CSS souborů, které budou linkovány z hlavičky
- css-bottom - seznam CSS souborů, které budu linkovány z patičky
- less-top - seznam LESS souborů, které budou zkompilovány dohromady a linkovány z hlavičky
- less-bottom - seznam LESS souborů, které budou zkompilovány dohromady a linkovány z patičky
Kompilace tématu
Téma se kompiluje pomocí theme-builderu, který je umístěn v pakage.json pod názvem "build" (při instalaci na serveru je volán script npm run build )
Ukázka nastavení: "build": "npx theme-builder ./settings.json"
Umístění souborů tématu
Z pohledu prohlížeče se zkompilované téma nachází na adrese /themes/kod-webu/kod-tematu
Odkazování na skripty
Do settings.json umisťujeme odkazy na skripty, které mohou mít formát:
- Absolutní (pro linkování skriptů z CDN)
- Relativní (pro linkování skriptů na serveru, stále používané pro starší sdílená CSS a JS)
- Dynamický (pro linkování skriptů z tématu - můžeme použít na začátku skriptu %THEME_ROOT% nebo ./)
Konfigurace skriptů
V rámci seznamu skriptů je možné uvést link na skript jako string. V tento moment je skriptu v hlavičce (top) automaticky přidán defer atribut, v patičce (bottom) zůstane čistý.
Namísto stringu je možné zapsat odkaz na skript pomocí objektu, který musí obsahovat atribut file.
Příklad pro JS:
"checkout": {
"file": "%THEME_ROOT%/js/checkout.js",
"async": true,
"defer": false
}Příklad pro CSS:
"checkout-printer": {
"file": "%THEME_ROOT%/js/checkout-printer.css",
"preload": true,
"media": "print"
}