Skip to content

Latest commit

 

History

History
120 lines (88 loc) · 4.13 KB

model-sluggable.md

File metadata and controls

120 lines (88 loc) · 4.13 KB

Pekné url

Množstvo webov potrebuje svoje podstránky zobrazovať na základe vygenerovaných nice friendly url adries reprezentujúce záznamy v databáze, namiesto výberu záznamov podľa id.

!> Vyberanie záznamu pomocou ID
example.com/clanok/1

!> Vyberanie záznamu pomocou slugu
example.com/clanok/moj-clanok


Generovanie pekných url adries

Pre tento prípad poskytuje rozšírenie CrudAdmin jednoduchú správu generovanie slugov na základe hodnôt z databázy pomocou vlastnosti sluggable v Admin Modeli.

class Article
{
    ...

    /*
     * Sluggable
     */
    protected $sluggable = 'name';

    ...
    protected $fields = [
        'name' => 'name:Názov|placeholder:Zadajte názov článku|required|max:90',
        'content' => 'name:Obsah článku|type:editor|required',
        'image' => 'name:Obrázok|type:file|image|required',
    ];
}

Po zadefinovaní vlastnosti sluggable, ktorá reprezentuje stĺpec poľa, z ktorého sa budu automaticky generovať url adresy, sa v databáze vytvorí pomocný stĺpec s názvom slug, do ktorého bude po vytvorení, či úprave záznamu uložená vygenerovaná hodnota slugu z tohto stĺpca.

donate

!> V prípade, že vygenerovaná hodnota slugu po vytvorení záznamu už v databáze existuje, bude za adresu slugu dosadená inkrementálna hodnota v poradí existéncie daného slugu. V preklade pokial 3 záznamy obsahuju názov Môj članok, slugy budú vygenerované s nasledujúcimi hodnotmi moj-clanok, moj-clanok-1, moj-clanok-2.


Podpora viac jazyčných slugov

Pokiaľ vstupné pole obsahuje parameter locale, ktorý prekladá záznam do viacerých jazykov, bude hodnota v stĺpci slug uložená vo formáte typu JSON, kde každý jazyk bude obsahovať vlastnú hodnotu slugu.

...

/*
 * Sluggable
 */
protected $sluggable = 'name';

protected $fields = [
    'name' => 'name:Názov|locale|required',
];

donate

!> Pokial záznam nemá v administrácii priradený preklad, systém CrudAdmin automatický použije slug z hlavného jazyka, alebo dostupnej preloženej hodnoty.

?> Viac o preklade záznamov a textu nájdete v sekcii jazykové mutácie.


Výber záznamu pomocou slugu

Výber záznamu z databázy pomocou slugu

V kontroléri k výberu záznamu z databázy CrudAdmin sprístupnil metódu findBySlug() alebo findBySlugOrFail(), ktoré vyhľadajú záznam na základe hodnoty slugu z url adresy, ktorá bola dosadená ako parameter v url adrese.

class ArticleController extends Controller
{
    ...

    /*
     *   example.com/article/{slug}
     */
    public function show($slug)
    {
        $article = Article::findBySlugOrFail($slug);

        return view('article')->withArticle($article);
    }
Výber záznamu z databázy pomocou slugu a id záznamu zároveň

K výberu záznamu pomocou hodnoty slug je možné vyberať záznam taktiež aj pomocou id záznamu zároveň. Ak funkcia findBySlug alebo findBySlugOrFail dostane ako druhý parameter id daného záznamu, skontroluje pravosť slugu v url adrese, a pri nezhode slugu s databázou automaticky presmeruje klienta na správnu url adresu záznamu s hlavičkou kódu 301.

class ArticleController extends Controller
{
    ...

    /*
     *   example.com/article/{id}/{slug}
     */
    public function show($id, $slug)
    {
        $article = Article::findBySlugOrFail($slug, $id);

        return view('article')->withArticle($article);
    }
Pristúpenie k hodnote slugu

Pokial chceme pristúpiť k hodnote slugu v danom zázname, jednoducho použíjeme metódu $article->getSlug(), ktorá vráti vygenerovanú hodnotu slugu z daného záznamu v databáze.

<a href="{{ action('ArticleController@show', $article->getSlug()) }}">
    {{ $article->name }}
</a>