Vývojář Vlastní content typy

Vlastní content typy

Stránky, příspěvky a archivy pokryjí hodně — ale portfolio, pracovní inzeráty nebo dokumentace si zaslouží vlastní typ obsahu s vlastními poli, URL a sekcí v administraci. Tento článek ukazuje, jak takový typ zaregistrovat.

Co vám content typ dá

Registrace typu přidá položku navigace pod Obsah v administraci, filtrovaný seznam, kompletní editační formulář (pole, SEO, taxonomie, builder) a frontendové vykreslování přes šablonu (themes.{theme}::{type}.show). Typ doc docs pluginu — který vykresluje i tuhle stránku — je referenční implementace.

Registrace typu

V metodě register() service provideru (AppServiceProvider aplikace nebo provider pluginu):

use Laravix\Cms\Support\ContentTypeDefinition;
use Laravix\Cms\Support\ContentTypeRegistry;

ContentTypeRegistry::register(
    ContentTypeDefinition::make('project')
        ->label('Projekt')
        ->pluralLabel('Projekty')
        ->linkableInNavigation()
        ->taxonomyTypes(['category']),
);

Metody definice:

Metoda Efekt
make(string $key) Unikátní klíč typu, ukládá se do contents.type
label() / pluralLabel() Názvy v administraci v jednotném/množném čísle (řetězce nebo překladové klíče)
linkableInNavigation() Publikované položky typu se nabízejí ve výběru stránek v editoru menu
builder(false) Skryje záložku vizuálního builderu pro tento typ
routePrefix('projects') Veřejné URL jsou /projects/{slug} místo /{slug}
taxonomyTypes(['category']) Omezí, jaké typy taxonomií lze přiřadit (prázdné = všechny)

Pozor: routePrefix znamená domácí úkol: vestavěná catch-all routa pouze 301-přesměruje /{slug} na /projects/{slug} — obsloužit prefixovanou URL musí routy, které zaregistrujete přes RouteRegistry (přesně to dělá docs plugin pro /docs/...). Pokud controllery psát nechcete, prefix vynechte a vestavěné vykreslování bude typ servírovat na /{slug}.

Přidání polí typu

Zaregistrujte poli definovaná v kódu — ve formuláři obsahu se objeví automaticky:

use Laravix\Cms\Enums\FieldType;
use Laravix\Cms\Support\FieldDefinition;
use Laravix\Cms\Support\FieldRegistry;

FieldRegistry::contentType('project', [
    FieldDefinition::make('client')->label('Klient'),
    FieldDefinition::make('year')->type(FieldType::NUMBER)->label('Rok'),
    FieldDefinition::make('cover')->type(FieldType::IMAGE)->label('Úvodní obrázek'),
]);

Hodnoty polí žijí v tabulce content_fields a v šablonách jsou dostupné přes $content->fields. Kompletní referenci typů polí najdete v článku Vlastní pole.

Vykreslení typu

Vytvořte themes/{vase-sablona}/views/project/show.blade.php. Dostane všechna standardní view data (viz Šablony a data ve views); bez něj typ genericky vykreslí default.blade.php šablony.

Vlastní typy taxonomií

Když si typ zaslouží vlastní slovník — jako doc-category u docs pluginu — zaregistrujte typ taxonomie a odkažte na něj:

use Laravix\Cms\Support\TaxonomyTypeRegistry;

TaxonomyTypeRegistry::register('project-category', 'Kategorie projektu');

Redaktoři pak v administraci vytvářejí taxonomie tohoto typu a přiřazují je projektům.

Kompletní příklad z praxe

Docs plugin registruje všechno probrané v ~30 řádcích — content typ s routePrefix('docs') a taxonomyTypes(['doc-category']), markdown pole body, typ taxonomie a vlastní routy. Přečtěte si packages/laravix/docs-plugin/src/DocsServiceProvider.php v monorepu jako předlohu.

Související články

Laravix Documentation · 13.07.2026
Star on GitHub