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:
routePrefixznamená 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řesRouteRegistry(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.