NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky

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 taken

Doplnenie 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 kryptomien

Odoslaní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.