Hezké URL pomocí databáze
- dotTwelve
- Člen | 167
Ahoj,
mam tabulku v databazi „Lokality“ a v ni sloupce id, nazev aj. no a chci
abych se odkazoval na konkretni stranku dane lokality v URL formatu
/lokality/nazev-lokality (webalizovany string) ovsem nevim jaky parametr si
predavat, jestli ID, nebo primo nazev. A taky jak toto resit na strane
routeru.
Diky moc
- Honza Marek
- Člen | 1664
Určitě předávat id, co by člověk dělal s názvem. Třída route má nějaký filtry na parametry, na to bych se podíval. Případně bych se nestyděl si napsat komplet vlastní routu, kdyby to nestačilo.
- Ondřej Mirtes
- Člen | 1536
Já nativně pracuji s tím webalizovaným stringem, protože mám obavy, kolik databázových dotazů by ty filtry vyprodukovaly :)
- Honza Marek
- Člen | 1664
Já bych řek jeden nebo žádnej :-P Tvé obavy opravdu nesdílím. Při prvnim dotazu můžeš načíst všechny a pokud se ti bude chtít, tak to můžeš i nacachovat.
- Ondřej Mirtes
- Člen | 1536
Nojono, když bych ale nějakým způsobem načetl všechny (což můžou být tisíce článků), tak to bude objekt o velikosti megabajtů, a to taky není ideální.
- dotTwelve
- Člen | 167
Ondřej Mirtes napsal(a):
Já nativně pracuji s tím webalizovaným stringem, protože mám obavy, kolik databázových dotazů by ty filtry vyprodukovaly :)
Muzes alespon trochu nastrelit, jak s tim webalizovanym stringem pracujes. To si ukladas do databaze pri insertu webalizovanej i string rovnou?
- Ondřej Mirtes
- Člen | 1536
Mám ho jako další sloupec, prostě jen místo IDčka filtruju výsledky
podle toho stringu, při insertech ho tam automaticky generuju (metoda
String::webalize()
).
- dotTwelve
- Člen | 167
Tak a narazil jsem jeste na routovani.
V presenteru mam metody: actionDefault() kde zobrazuji vsechny lokality a pak
actionView($id) kde $id je webalizovany string.
Adresy jsou ve tvaru /lokality/ – kompletni vypis lokalit a /lokality/nazev-lokality/ – vypis konkretni lokality.
V routeru mam:
<script>
$router[] = new Route('lokality/<id>', array(
'presenter' => 'Lokality',
'action' => 'zobraz',
));
</script>
Ale po zadani adresy ve tvaru /lokality/nazev-lokality/ mi to haze chybu, ze nelze najit template /Lokality/nazevLokality.phtml pritom ale v actionView($id) definuji $this->view = ‚lokalita‘;
Tak prosim poradte.
Vyreseno: v bootstrapu stacilo prehodit poradi rout. No to bych v zivote necekal…
<script>
$router[] = new Route('lokality/<nazev>', array(
'presenter' => 'Lokality',
'action' => 'zobraz',
));
$router[] = new Route('<presenter>/<action>/<id>', array(
'presenter' => 'Domu',
'action' => 'default',
'id' => NULL,
));
</script>
Editoval dotTwelve (24. 3. 2010 12:43)