Routy, jak na ně a na jejich správnou strukturu?

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

Zdravím, řeším na svém webu hezké URL a potřebuji poradit.

Mám komponentu kalendář, která při přepnutí měsíce (next,previous). vyšle signál pro změnu měsíce, zpracuje se v handleru a po překreslení šablony má URL tvar

„/www/kalendar/?kalendar-month=7&kalendar-year=2016“.

neřeším teď to, že to možná není efektivní pokaždé překreslovat celou šablonu :D

nikde jsem nijak nepřišel na to, jak se vytváří ta data v URl ve tvaru <presenter>-prom („kalendar-month“ a „kalendar-year“). To mi je stále trochu záhadou.

každopádně po překreslení měsíce a kliknutí na určité datum mám URL ve tvaru

„www/kalendar/day?year=2016&month=7&day=1“

Potřeboval bych si napsat takovou routu, aby byly ve tvaru

„www/kalendar/2016/7“ resp. „www/kalendar/2016/7/1“.

snažil jsem se o to a jediné co ze mě vylezlo bylo něco na tento způsob.

$router[] = new Route('<presenter>[/<action>][/<kalendar-year>][/<kalendar-month>][/<year>][/<month>][/<day>]', array(
                    'presenter' => 'Homepage',
                    'action' => 'default',
));

ono to sice funguje, jenomže jen tak na oko… v Tracy v requestu je uloženo následující:

Kalendar:day
kalendar-year = 2016
kalendar-month = 7
year = 1
day = NULL
month = NULL

což nechci, protože potřebuji pracovat dále s daty year,day a month pro výtah z databáze.
Snažím se těm Routám přijít na chuť, ale stále mi to do hlavy neleze. Takže pokud by mě někdo nakopnul, (ke správnému řešení :D ) byl bych mu velmi vděčný :)

Mnohokrát díky za případné odpovědi.

abc
Člen | 92
+
0
-

Necpi to do jedné routy, vyrob si ještě jednu specifickou pro kalendář a dej ji před tu obecnou, viz https://doc.nette.org/…tion/routing#…

abc
Člen | 92
+
+1
-

Ještě doplním příklad (nevím, zda funkční):

$router = new RouteList;
$router[] = new Route('kalendar/<year>/<month>/<day>', array(
                    'presenter' => 'Kalendar',
                    'action' => 'default',
));
$router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');

V KalendarPresenter následně

public function actionDefault($year, $month, $day){}
Teapack666
Člen | 9
+
0
-

Super !!! díky moc ;)

No dokumentaci jsem pročítal 10× a netrklo mě to. Teď už to funguje jak má ;)

Díky ještě jednou

greeny
Člen | 405
+
0
-

Teapack666 napsal(a):
nikde jsem nijak nepřišel na to, jak se vytváří ta data v URl ve tvaru <presenter>-prom („kalendar-month“ a „kalendar-year“). To mi je stále trochu záhadou.

Jen doplním, že to není <presenter>-variable, ale <componentName>-variable, ve tvém případě je to komponenta se jménem kalendar (shodou náhod v presenteru se jménem kalendar). Je to proto, aby Nette mohlo odlišit parametry pro danou komponentu od „globálních parameterů“, neboli parametrů presenteru (který je mimochodem taky komponenta).