Vývojář Struktura tématu

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.
  • version a author — vykreslí se pod názvem ve výběru jako řádek verze · 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 šablony preview.svg, preview.webp, preview.png nebo preview.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í:

  1. themes/{vasesablona}/views
  2. themes/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í se views/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:

  1. Vytvořte složku a její manifest:

    mkdir -p themes/mytheme
    
    { "name": "Moje šablona", "version": "1.0.0", "author": "Vy" }
    
  2. Přepište jen to, co chcete změnit. Jednotlivé soubory si podle potřeby zkopírujte z themes/default/views — začněte u layouts/app.blade.php — a zbytek nechte na fallbacku.

  3. Pokud buildujete CSS nebo JS, nechte výstup padat do themes/mytheme/dist/ a spusťte php artisan laravix:theme:link.

  4. Volitelně přihoďte preview.png.

  5. 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

Laravix Documentation · 25.08.2026
Star on GitHub