Vlastní routy a odkazy
- Aurielle
- Člen | 1281
Tak ještě jeden dotaz, když mám kód
$router[] = new Route('vypocetni-technika/<id [a-zA-Z0-9_-]+>', array(
'presenter' => 'Inzerat',
'action' => 'zobrazit',
));
$router[] = new Route('<presenter>/<view>/<id [a-zA-Z0-9_-]+>', array(
'presenter' => 'Default',
'view' => 'default',
'id' => NULL,
));
tak jak pak přinutit Nette aby mi generovalo odkazy ve tvaru vypocetni-technika/xxx a přitom odkazovalo na prezenter Inzerat podle té routy?
- Ondřej Mirtes
- Člen | 1536
{plink Inzerat:zobrazit}
ti matchne tedy až ta druhá
routa?
BTW: Na ladění můžeš zkusit Routing Debugger.
- kravčo
- Člen | 721
Routy by vždy mali postupovať od najkonkrétnejších ku všeobecnejším, najmä vtedy, ak nie sú jednoznačné (čo je aj tento prípad). To poradie máš v poriadku.
Linky by sa mali generovať správne, aspoň u mňa sa správne generujú:
{plink Default:} = /
{plink Inzerat:zobrazit} = /inzerat/zobrazit
{plink Inzerat:zobrazit, 123} = /vypocetni-technika/123
Druhý príklad totiž prvej route nevyhovie (povinné id) a preto sa použije všeobecnejšia routa.
Editoval kravco (22. 3. 2009 17:44)
- Ola
- Člen | 385
LastHunter napsal(a):
{plink Inzerat:zobrazit}
ti matchne tedy až ta druhá routa?BTW: Na ladění můžeš zkusit Routing Debugger.
{plink Inzerent:zobrazit}
by měla matchnout až druhá routa,
jelikož parametr id není volitelný.. Pokud je žádané, aby parametr id
volitelný nebyl (tedy {plink Inzerent:zobrazit}
generovalo
/vypocetni-technika/, pak se musí do definice routy přidat řádek
'id' => NULL
.
Editoval Ola (22. 3. 2009 17:45)
- Aurielle
- Člen | 1281
Přidám ještě trochu detailů: Ty routy jako ta první jsou tam další 2 a vypadají stejně až na název před <id>. Z důvodu SEO bych měl radši vypocetni-technika/xxx nebo gps/xxx než inzerat/zobrazit/xxx. A právě nevím jak to nacpat do toho linku.
edit: s jednou routou to funguje (zatím)
Editoval gmvasek (22. 3. 2009 17:47)
- Ola
- Člen | 385
Jo takhle .. samozřejmě že stačí jedno view, akorát si přidej třeba jeden parametr kategorie – ten si dej do routy (pak Ti stačí jen jedna routa), a odkazuj i s tím parametrem kategorie ..
Jinak samozřejmě že se vždy namatchuje první routa, oni jsou totiž v podstatě všechny stejný ..
Ve výsledku to může vypadat třeba takhle:
Routa:
$router[] = new Route('<category [a-zA-Z0-9_-]+>/<id [a-zA-Z0-9_-]+>', array(
'presenter' => 'Inzerat',
'action' => 'zobrazit',
));
Deklarace view: function renderZobrazit($category, $id)
Šablona:
{plink Inzerat:zobrazit 'vypocetni-technika', 'idproduktu'}
Editoval Ola (22. 3. 2009 17:55)