Vlastní pole
Vlastní pole připojují k obsahu strukturovaná data — podtitulek, cenu, úvodní obrázek. Laravix je umí definovat dvěma způsoby: v kódu (přenositelné, verzované) a v administraci (rychlé, per web). Tento článek pokrývá oba plus referenci typů polí.
Typy polí
Oba způsoby definice sdílejí stejné typy (Laravix\Cms\Enums\FieldType):
| Typ | Komponenta v administraci | Ukládaná hodnota |
|---|---|---|
text |
Textové pole | řetězec |
textarea |
Víceřádkový text | řetězec |
rich_text |
Rich text editor | HTML řetězec |
markdown |
Markdown editor | Markdown řetězec |
image / file |
Výběr médií (z knihovny nebo upload) | ID média |
boolean |
Přepínač | 0/1 |
select |
Select (možnosti z config(['options' => [...]])) |
klíč možnosti |
url |
URL pole | řetězec |
date / datetime |
Výběr data / data a času | datum jako řetězec |
number |
Číselné pole | číslo jako řetězec |
color |
Výběr barvy | hex řetězec |
Hodnoty se ukládají jako řádky klíč–hodnota do content_fields a ve formuláři obsahu se zobrazují seskupené do sekcí podle group.
Možnost 1: pole v kódu
Registrují se v register() service provideru; ideální pro pluginy a vše, co chcete mít ve verzovacím systému:
use Laravix\Cms\Enums\FieldType;
use Laravix\Cms\Support\FieldDefinition;
use Laravix\Cms\Support\FieldRegistry;
// pro všechny typy obsahu:
FieldRegistry::content([
FieldDefinition::make('subtitle')->label('Podtitulek'),
]);
// pro jeden typ obsahu:
FieldRegistry::contentType('post', [
FieldDefinition::make('excerpt')
->type(FieldType::TEXTAREA)
->label('Úryvek')
->group('Detaily příspěvku')
->hint('Zobrazuje se ve výpisech příspěvků.'),
]);
Metody FieldDefinition: type(), label(), group() (nadpis sekce formuláře), hint() (nápověda), config() (extra volby, např. ['options' => [...]] u selectů).
Samotné jádro takhle registruje SEO pole (meta_title, meta_description, og_image, noindex) — jsou to prostě pole ve skupině SEO.
Možnost 2: pole v administraci
Správci webu definují pole bez kódu:
- Otevřete Custom fields v menu administrace.
- Vytvořte pole: Content type, Typ, Klíč (po vytvoření neměnný), Popisek, volitelně Skupina a Nápověda, Pořadí, přepínač Povinné.
- Pole se okamžitě objeví ve formuláři obsahu daného typu.
Pole z administrace jsou per web — ideální pro data specifická jednomu webu. Definice se cachují na hodinu, ale cache se při uložení nebo smazání pole automaticky maže.
Tip: Když pole z administrace použije stejný klíč jako pole z kódu, vyhrává definice z kódu. A na headless webech formulář obsahu ukazuje jen pole definovaná v administraci — SEO pole z kódu se skrývají, protože SEO je práce frontendu.
Čtení polí
V šablonách:
@php $fields = $content->fields->pluck('value', 'key'); @endphp
<p>{{ $fields->get('excerpt') }}</p>
U polí image/file je hodnotou ID média — vyřešte ho přes $mediaMap[(int) $fields->get('cover')] ?? null (mapa médií už obsahuje všechna média, na která odkazují registrovaná obrázková pole).
V API: každá odpověď s obsahem nese objekt fields se surovými páry klíč–hodnota, takže headless frontend dostane vaše data automaticky. Viz API reference.