Vlastní routy a odkazy

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

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?

Tomik
Nette Evangelist | 485
+
0
-

To, co tu bylo, už tu není, byl to nesmysl.

Edit: Napsal jsem blbost, před chvilkou jsem vstával, tak mi to prosím všichni odpusťte! :)

Editoval Tomik (22. 3. 2009 17:27)

Ondřej Mirtes
Člen | 1536
+
0
-

{plink Inzerat:zobrazit} ti matchne tedy až ta druhá routa?

BTW: Na ladění můžeš zkusit Routing Debugger.

kravčo
Člen | 721
+
0
-

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

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

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

Odkazuješ tak jak psal kravco? A nemáš tam ještě předtím nějakou obecnější routu?

Aurielle
Člen | 1281
+
0
-

Nehledě na to kolik tam je v podstatě stejných rout to vždycky vezme tu první… dá se nějak vyřešit abych si přímo v linku mohl zvolit url kterou to vypíše nebo pro každou url takto musím udělat samostatný view?

Ola
Člen | 385
+
0
-

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)

Aurielle
Člen | 1281
+
0
-

Díky, funguje to :)