1.5 KiB
slug
Pole slug generowane automatycznie z tytułu, per locale.
Użycie (kolekcja klienta)
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
buildSlugField({
from: 'title', // pole źródłowe
name: 'slug', // nazwa pola (domyślnie 'slug')
required: true, // domyślnie true
})
Pomocnicze
import { toSlug } from '@intecion/ipal-kit'
toSlug('Strona główna') // 'strona-glowna'