Hezké URL pomocí databáze

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
dotTwelve
Člen | 167
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

Ondřej Mirtes napsal(a):

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()).

Jasny, tak to taky tak udelam…varchar (128) na H1 by mohl stacit.

Diky

dotTwelve
Člen | 167
+
0
-

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)

Ola
Člen | 385
+
0
-

k tomu pořadí rout – musí se přehodit, protože router postupuje od první routy k poslední dokud nenalezne takovou routu, která vyhovuje zadání (URL). Ve tvém případě ale vyhovovala už první routa.

Btw. označovat url/slug jako id – to se mi nelíbí.