Príspevky, kategórie a tagy majú mapu slugov pre každý jazyk, ktorú spravuje sluggable-for-laravel. Slugy príspevkov vznikajú z posts.slugs.source (predvolene title); slugy kategórií a tagov z name.
- Generujú sa pre každý jazyk, ktorý má zdrojovú hodnotu a v ktorom slug vyhľadávanie dokáže nájsť: aktuálny jazyk, posts.locales.fallback a sluggable.locales.supported (predvolene app.locale + app.fallback_locale). Prázdny nadpis alebo nadpis, z ktorého nevznikne žiadny slug, sa preskočí.
- Dopĺňajú sa, neprepisujú: uloženie, ktoré mení model, doplní jazyky bez slugu; existujúce slugy zostanú, takže úprava nadpisu nikdy nerozbije URL.
- Unikátne v rámci jazyka (posts.slugs.unique): pri kolízii dostanú -2, -3, … v obmedzených dávkových pokusoch. Zmazané záznamy aj záznamy skryté global scopes sa rátajú ako obsadené a unikátne indexy pre jednotlivé jazyky spolu s automatickým opakovaním pokrývajú súbeh dvoch súčasných uložení.
- Ručne zadané slugy sa normalizujú a zjednotia — z Custom Slug vznikne custom-slug, z taken vznikne taken-2 — vrátane tých, ktoré dostane CreatePostAction.
Čítanie slugov
$post->currentSlug(); // current locale → posts.locales.fallback → any locale
$post->slugFor('sk'); // exactly one locale, no fallback
$post->slugMap(); // ['en' => 'hello-world', 'sk' => 'ahoj-svet'] — with sk in sluggable.locales.supported
// Swappable model: find through the facade, not Post::findBySlug() (which is always the packaged class)
Posts::findBySlug('hello-world'); // current locale → fallback → any locale
Posts::findBySlug('ahoj-svet', 'sk'); // exactly one locale — null on a default install, which has no sk slug
Posts::query()->whereSlug('hello-world')->first();Jazyk mimo tohto zoznamu slug nedostane, aj keď v ňom príspevok má nadpis: pri predvolenej anglickej inštalácii slovenský nadpis nevytvorí slug sk, takže Posts::findBySlug('ahoj-svet', 'sk') vráti null. Všetky jazyky obsahu uveďte v sluggable.locales.supported — ešte pred migráciou, aby ich pokryli unikátne indexy pre jednotlivé jazyky — alebo nainštalujte translatable-for-laravel, ktorého jazyky potom sluggable použije.
Ručné slugy
$post->setTranslation('slug', 'en', 'Custom Slug')->save();
$post->slugFor('en'); // 'custom-slug' — or 'custom-slug-2' when it is takenDoplnenie a údržba
Uloženie bez zmien nič nemení, preto jazyky bez slugu — napríklad po pridaní nového jazyka — doplňte príkazmi zo sluggable. Pred vytvorením indexov nad existujúcimi dátami spustite kontrolu duplicít: staršie verzie pri kontrole slugov ignorovali zmazané príspevky, takže živý a zmazaný príspevok môžu mať rovnaký slug.
# Backfill slugs for locales that have none yet (add --dry-run to preview)
php artisan sluggable:regenerate "RoundlyConsulting\Posts\Models\Post" --mode=missing
# List slugs a unique index would reject — run before indexing existing data
php artisan sluggable:duplicates "RoundlyConsulting\Posts\Models\Post"
# Build the per-locale unique indexes (e.g. for a locale added after migrate)
php artisan sluggable:indexes "RoundlyConsulting\Posts\Models\Post"Rovnaké príkazy spustite aj pre RoundlyConsulting\Posts\Models\Category a RoundlyConsulting\Posts\Models\Tag.
Prejavte lásku k open source
Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.
Ďalšie spôsoby podpory vrátane kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
Chcete to zabudovať do svojho produktu?
Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.