Files
ipal-kit/docs/slug.md
T
2026-08-04 19:37:23 +02:00

59 lines
1.5 KiB
Markdown

# slug
Pole slug generowane automatycznie z tytułu, per locale.
## Użycie (kolekcja klienta)
```ts
import { buildSlugField } from '@intecion/ipal-kit'
export const Pages: CollectionConfig = {
slug: 'pages',
fields: [
{ name: 'title', type: 'text', required: true, localized: true },
buildSlugField({ from: 'title' }),
// ...
],
}
```
Zwraca gotowe pole: `slug`, text, localized, required, z hookiem
`beforeValidate`.
## Zachowanie
Slug generuje się z pola źródłowego **tylko gdy jest pusty**. Cokolwiek edytor
wpisze ręcznie, zostaje — także po zmianie tytułu. Zmiana adresu opublikowanej
strony to zerwane linki, więc plugin nigdy nie robi tego sam.
Diakrytyki idą przez `slugify`: „Strona główna" → `strona-glowna`.
## Per locale
Slug jest zlokalizowany — każdy język ma własny. Edytując w PL ustawiasz
`slug.pl`, w EN `slug.en`.
**Konsekwencja:** slug generuje się tylko dla locale, w którym wypełniono tytuł.
Utworzysz stronę po polsku, przełączysz front na `/en/…` — 404, bo `slug.en`
jest puste. Trzeba przełączyć locale w adminie i wpisać tytuł po angielsku.
To ta sama mapa slugów, z której powstają hreflang alternates (patrz seo.md) i
przełącznik języka (patrz i18n.md).
## Opcje
```ts
buildSlugField({
from: 'title', // pole źródłowe
name: 'slug', // nazwa pola (domyślnie 'slug')
required: true, // domyślnie true
})
```
## Pomocnicze
```ts
import { toSlug } from '@intecion/ipal-kit'
toSlug('Strona główna') // 'strona-glowna'
```