Vývojář Šablony a data ve views

Šablony a data ve views

Každá šablona tématu dostává bohatou, předem poskládanou sadu proměnných — obsah, nastavení webu, navigaci, média a SEO data. Tento článek je referencí těchto dat a pravidel, kterých by se šablony měly držet.

Jak se šablona vybírá

Pro obsah typu page na webu se šablonou mytheme Laravix vykreslí themes.mytheme::page.show.

Tento namespace se hledá nejdřív ve vaší šabloně a teprve pak ve výchozí, takže pohled „existuje", pokud ho poskytne kterákoli z nich. Teprve když ho nemá ani jedna — třeba u neznámého typu obsahu — spadne Laravix na themes.mytheme::default, který se hledá stejným způsobem. Stejná konvence platí pro každý typ obsahu včetně pluginových.

Prakticky: chcete-li změnit vzhled příspěvků, přidejte do své šablony post/show.blade.php. Chcete-li je nechat být, nepřidávejte nic. Viz Struktura šablony.

Dostupné proměnné

Skládá je Laravix\Cms\Services\PageDataBuilder a CMS controller:

Proměnná Typ Obsah
$content Content Vykreslovaný obsah s načtenými fields a taxonomies
$site Site Aktuální web
$seo array title, description, og_image_url, noindex, canonical — fallbacky obsah → nastavení už aplikované
$settings Collection Všechna nastavení webu jako klíč ⇒ hodnota
$navigations array Položky menu hlavičky/patičky, už lokalizované pro aktuální jazyk
$navDesign array Hodnoty designu ze záložek Design u navigace
$logoMedia, $faviconMedia ?Media Logo a favicon z nastavení, vyřešené na modely
$mediaMap Collection Mapa id ⇒ Media všech médií, na která se stránka odkazuje
$navPages Collection Publikované stránky/archivy aktuálního jazyka (id, title, slug, is_homepage) — pro stavbu jednoduchých menu
$archivePosts ?Collection Jen u obsahu typu archive: publikované příspěvky od nejnovějšího
$grapesjsHtml ?string HTML z vizuálního builderu, už hydratované (naplněné výpisy příspěvků, aplikované pluginové hydratory)
$defaultLocale, $currentLocale string Kódy jazyků
$alternates Collection locale ⇒ absolutní URL publikovaných překladů (pro hreflang)
$systemFieldKeys array Klíče polí registrovaných v kódu — hodí se k oddělení od ad-hoc polí
$appearance Collection Přepisy vzhledu pro danou stránku. Aktuálně vždy prázdné — výchozí layout z něj čte barvu pozadí, barvu textu a vlastní CSS třídu, takže šablona, která ho používá, musí snést prázdné hodnoty
$bgMedia ?Media Obrázek na pozadí stránky. Aktuálně vždy null, výchozí layout ho čte spolu s $appearance

Práce s médii

Modely médií nabízejí $media->url (originál) a $media->variantUrl(ImageVariant::LARGE) pro zmenšené varianty (THUMBNAIL, MEDIUM, LARGE, OG, FAVICON, FULL — viz Laravix\Cms\Enums\ImageVariant). Vždy vykreslete nejmenší variantu, která na dané místo stačí.

Práce s fieldy

@php $fields = $content->fields->pluck('value', 'key'); @endphp
{{ $fields->get('excerpt') }}

Assety šablony

Ze souboru udělají URL dva helpery, oba na Laravix\Cms\Laravix:

{{-- Stylesheet dodávaný s jádrem, z public/vendor/laravix/ --}}
<link rel="stylesheet" href="{{ \Laravix\Cms\Laravix::asset('app.css') }}">

{{-- Soubor, který si vaše šablona sestavila do themes/{theme}/dist/ --}}
@if ($themeStylesheet = \Laravix\Cms\Laravix::themeAsset('app.css', $site->theme))
    <link rel="stylesheet" href="{{ $themeStylesheet }}">
@endif

themeAsset() bere název souboru a klíč šablony a vrací null, když soubor v dist/ dané šablony není — vždy ho tedy ošetřete jako výše, místo abyste ho vypisovali rovnou do atributu. Vrácená URL končí značkou ?v= odvozenou z času poslední změny souboru, což zneplatní cache prohlížeče při každém přebuildování.

Oba helpery ukazují na skutečné soubory pod public/, což u šablon znamená symlink public/themes/{theme} vytvořený příkazem php artisan laravix:theme:link. Když se stylesheet šablony tiše nenačítá, zkontrolujte nejdřív tenhle odkaz.

Vykreslení obsahu z builderu

Obsah navržený ve vizuálním builderu přichází jako $grapesjsHtml. Obsah postavený z klasických bloků přichází jako pole $content->blocks. Jádro dodává partial, který zvládá obojí, včetně JavaScriptu pro slidery, záložky, odpočty a bloky s vlastním kódem:

@include('laravix::cms.builder-content')

page/show.blade.php výchozí šablony dělá přesně tohle, když builder obsah existuje, a jinak spadne na prosté rozložení s titulkem a poli. Pokud bloky vykreslujete sami, každá položka $content->blocks je ['type' => ..., 'data' => [...]] a mapuje se na view šablony blocks/{type}.blade.php, které dostane data bloku plus $mediaMap.

URL a jazyky

Odkazy na jiný obsah stavějte přes $content->path($defaultLocale) — vyřeší úvodní stránku, route prefixy i jazykové prefixy. V layoutu vypisujte alternates:

@foreach ($alternates as $altLocale => $altUrl)
    <link rel="alternate" hreflang="{{ $altLocale }}" href="{{ $altUrl }}">
@endforeach

SEO kontrakt

Layouty by měly ctít pole $seo: $seo['title'] do <title>, vypsat popis a canonical odkaz, při $seo['noindex'] vydat robots meta noindex,nofollow a $seo['og_image_url'] použít pro Open Graph. layouts/app.blade.php výchozí šablony je kompletní referenční implementace včetně Open Graphu, Twitter karet a JSON-LD.

Související články

Laravix Documentation · 25.08.2026
Star on GitHub