Š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. Když view neexistuje, spadne na themes.mytheme::default. Stejná konvence platí pro každý typ obsahu včetně pluginových.
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í |
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') }}
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.