Struktura tématu
Šablona (theme) je složka Blade šablon, která určuje vzhled webu. Weby v režimu šablony si ji vybírají v administraci a jedna instalace může obsahovat libovolný počet šablon. Tento článek popisuje anatomii složky a vytvoření vlastní šablony.
Kde šablony žijí
Šablony sedí v kořeni aplikace ve složce themes/:
themes/
└── default/
├── theme.json (povinné)
├── preview.png (volitelné)
├── assets/ (vaše zdroje, pokud něco buildujete)
├── dist/ (sestavené CSS/JS, servírované prohlížeči)
└── views/
├── layouts/app.blade.php
├── default.blade.php
├── page/show.blade.php
├── post/show.blade.php
├── archive/show.blade.php
├── preview/nav.blade.php
└── blocks/
├── text.blade.php
├── hero.blade.php
└── ...
Adresář se stane šablonou jen tehdy, když obsahuje platný theme.json. Adresáře bez něj se zcela ignorují — nevznikne view namespace ani položka ve výběru šablon. Každá rozpoznaná šablona se registruje jako Blade view namespace: themes/default/views/page/show.blade.php je dostupný jako themes.default::page.show. Seznam šablon v administraci (zakládání webu a Nastavení → Vzhled) je seznam platných manifestů.
Manifest
theme.json je povinný. Povinný je jen klíč name a musí to být neprázdný řetězec — vše ostatní je volitelné:
{
"name": "Default",
"version": "1.0.0",
"author": "Laravix",
"description": "Šablona dodávaná s Laravixem.",
"screenshot": "preview.png"
}
name— popisek zobrazený ve výběru šablon. Bez něj šablona pro Laravix neexistuje.versionaauthor— vykreslí se pod názvem ve výběru jako řádekverze · autor.description— volný text pro vaši potřebu.screenshot— cesta k náhledovému obrázku relativně ke složce šablony. Když ho vynecháte, Laravix hledá v kořeni šablonypreview.svg,preview.webp,preview.pngnebopreview.jpg, v tomto pořadí.
Pohledy a fallback na výchozí šablonu
View namespace šablony se hledá na dvou místech, v tomto pořadí:
themes/{vasesablona}/viewsthemes/default/views
To znamená, že šablona musí obsahovat jen ty pohledy, které opravdu mění. Když vaše šablona nemá post/show.blade.php, vykreslí se ten z výchozí šablony — s vaším layouts/app.blade.php, pokud jste přepsali jeho. Šablona složená pouze z theme.json a vlastního layoutu je naprosto v pořádku.
Samotná výchozí šablona fallback nemá; je dnem celého stohu.
-
views/{type}/show.blade.php— šablona typu obsahu (page,post,archive, pluginové typy). Když ji nemá ani vaše, ani výchozí šablona, vykreslí seviews/default.blade.php— šablona tak funguje i pro typy obsahu, o kterých nikdy neslyšela. -
views/layouts/app.blade.php— sdílený layout:<head>se SEO tagy, hlavičková navigace,@yield('content'), patička. Výchozí šablona navíc definuje@stack('head')a@stack('scripts'), přes které view obsahu z builderu vkládá styly a skripty. -
views/blocks/{key}.blade.php— jedno view pro každý klasický typ bloku (text,hero,cards,columns,button,button_group,divider). Použijí se, když obsah vznikl z klasického pole bloků, ne ve vizuálním builderu — viz Šablony a data ve views. -
views/preview/nav.blade.php— volitelný partial, který živý náhled navigace v administraci používá k vykreslení samotné navigace. -
views/docs/…,views/changelog/…— pluginy nejdřív hledají svá views v aktivní šabloně (themes.{theme}::docs.show) a teprve pak sahají po vlastních přibalených views, takže šablona může přestylovat i stránky pluginů.
Assety šablony
Všechno, co si musí stáhnout prohlížeč, žije v adresáři dist/ dané šablony. Ten se neservíruje přímo — public/themes/{theme} je symlink, který na něj míří:
php artisan laravix:theme:link
laravix:install ho spustí za vás. Ručně ho spusťte po přidání nové šablony, přepínačem --force nahradíte odkazy, které už existují. Šablony bez adresáře dist/ se přeskočí.
Na sestavený soubor se ze šablony odkážete přes Laravix::themeAsset(), které vrací null, když soubor neexistuje:
@if ($themeStylesheet = \Laravix\Cms\Laravix::themeAsset('app.css', $site->theme))
<link rel="stylesheet" href="{{ $themeStylesheet }}">
@endif
Vrácená URL nese ?v= značku odvozenou z času poslední změny souboru, takže přebuildovaný asset sám zneplatní cache prohlížeče.
Jak dist/ vyrobíte, je na vás — Vite, esbuild, Tailwind CLI, nebo ručně psané CSS zkopírované dovnitř. Laravix zajímá jen to, že sestavené soubory skončí tam. Zdroje si držte v assets/ (nebo kdekoli mimo dist/), ať vám je build nikdy nepřepíše.
Poznámka: Výchozí šablona nemá adresář
dist/. Načítá stylesheet dodávaný s jádrem (Laravix::asset('app.css')→public/vendor/laravix/app.css) plus Font Awesome z CDN a teprve na to navrství stylesheet šablony, pokud nějaký existuje. Vlastní šablona může stylesheet jádra úplně vynechat a přinést si vlastní.
Vytvoření šablony
Díky fallbacku se nezačíná kopií, ale prázdnou složkou:
-
Vytvořte složku a její manifest:
mkdir -p themes/mytheme{ "name": "Moje šablona", "version": "1.0.0", "author": "Vy" } -
Přepište jen to, co chcete změnit. Jednotlivé soubory si podle potřeby zkopírujte z
themes/default/views— začněte ulayouts/app.blade.php— a zbytek nechte na fallbacku. -
Pokud buildujete CSS nebo JS, nechte výstup padat do
themes/mytheme/dist/a spusťtephp artisan laravix:theme:link. -
Volitelně přihoďte
preview.png. -
V administraci otevřete Nastavení → Vzhled a novou šablonu vyberte. Změna platí okamžitě.
Zkopírovat celou výchozí šablonu pořád funguje, ale znamená to, že se k vám žádná budoucí oprava ve výchozích šablonách už nedostane.
Šablony a aktualizace
php artisan laravix:upgrade se složky themes/ nikdy nedotýká — patří vám. Výchozí šablona se publikuje jen jednou, při instalaci (instalátor publikaci přeskočí, když themes/default už existuje). Čistou kopii výchozí šablony později získáte ručně:
php artisan vendor:publish --tag=laravix-theme
Zapíše theme.json, views/ a assets/. Adresář dist/ nevytvoří — výchozí šablona žádný nemá.
Související články
- Šablony a data ve views — jaká data každá šablona dostává
- Příkazy CLI —
laravix:theme:link - Vlastní bloky