Hezké url – práce s parametrem
- MartinitCZ
- Člen | 580
Ahoj,
lámu si tu hlavu nad jednuducho otázkou, co je lepší?
$article = [
'title' => 'Příliš žluťoučký kůň',
'slug' => 'prilis-zlutoucky-kun',
];
- Ukládat si slug do db a odkazy tvořit ve tvaru {link defaul, slug ⇒ $article->slug}
- Využít masky {link default, title ⇒ $article->title}
- froggy
- Člen | 17
S tou neměnností URL si nejsem jistý.
Na různých projektech jsem zkusil/viděl dva složitější přístupy.
- Do databáze se uložil slug podle title, vedle existovala tabulka starých slugů a v případě, že vznikl HTTP požadavek na starý slug, tak došlo k redirectu na nový.
- Slug se vždy vygeneroval a žádná tabulka historických neexistovala. Pokud se objevila duplicita, tak se připojilo ke slugu ID položky.
Pokud by existovalo další řešení problému, kdy chci používat slug (místo ID) v URL a zároveň ošetřit to, aby starší verze slugů nekončily chybou 404, zajímalo by mně.
- Oli
- Člen | 1215
Používám slug. Nepoužívám to teda, tak jak uvádíš v prvním příspěvku, ale odkza je ve tvaru:
{link Presenter:action $id}
Kdy se mi $id pomocí filtrů v RouterFactory přepíše na slug. Má to tu výhodu, že pokud bych chtěl kdykoli na cokoli změnit tvar url, tak nemusím do {link} vubec zasahovat…
- MartinitCZ
- Člen | 580
@**JHadamcik**: Přijde mi, že jsi to nějak pomotal. Neprohodil jsi slug a id?
Mě osobně se asi nejvíc zamlouvá tabulka slug, kde bude id článku a jeho slug. Díky tomu si ošetřit změnu titulku a neexistující url.
- Jan Tvrdík
- Nette guru | 2595
@martinit: Jsem pro variantu (1), tj. ukládat do databáze slug a při tvorbě odkazů ho předávat. Přičemž při návrhu databáze pamatuj, že musíš uchovávat i staré slugy, aby jsi byl schopen zajistit trvalost odkazů.
Varianta (2) neumožňuje mít URL ve tvaru
http://example.com/<slug>
, ale musíš použít
http://example.com/<id>-<slug>
(takže i při tvorbě
odkazů musíš předávat oba parametry), protože ze samotného slugu nejsi
schopen určit cílovou stránku. Tato varianta URL se mi osobně nelíbí,
protože jsi v podstatě nucen akceptovat URL jako
http://example.com/<id>-jakakoliv-blbost
.