Routy, jak na ně a na jejich správnou strukturu?
- Teapack666
- Člen | 9
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
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
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
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
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).