Co najjednoduchsie tvary URL adries pre routovanie
- tolljump
- Člen | 47
Zdravim vas.
Snazim sa prerobit cely system ktory mam postaveny na Nette a preto by som uz
rad vycistil aj routovanie a trochu ho sprehladnil.
Chcel by som v nom „cisto“ poriesit preklad statickych rout (napr.
/prihlasenie, /kontakt a pod.) a tiez vyriesit dilemu, ako sa dostat k tej
spravnej route, ktora bude generovat aj pre clanky, aj pre kategorie clankov, aj
pre produkty, kategorie produktov atd. atd. jeden najjednoduchsi tvar,
napr.:
/titulok-clanku
/nazov-kategorie-clanku
/nazov-produktu
/nazov-kategorie-produktov
Vsetky tieto aliasy ukladam do samostatnych databazovych tabuliek (clanky,
kategorie, produkty, atd.), kde kazdy clanok, kategoria atd. ma vygenerovany
jedinecny alias.
No kedze pouzivame Nette a mame presentre, tak potrebujem aby router vedel najst
alias z tychto 4–5 tabuliek a podla toho z ktorej tabulky vrati vysledok
(napr. z tabulky produktov), aby vedel ze to je ProductPresenter a action
showProduct, s aliasom „nazov-produktu“ (pripadne s ID produktu).
Ako toto rozumne vytvorit?
Este k tej prvej teme statickych rout. Teraz mam nieco take:
$router[] = new Route(_('kontakt'), array(
'lang' => $translator->getDefault(),
'presenter' => 'Contact',
'action' => 'default',
));
$router[] = new Route(_('prihlasenie'), array(
'lang' => $translator->getDefault(),
'presenter' => 'User',
'action' => 'login',
'id' => null
));
$router[] = new Route(_('registracia'), array(
'lang' => $translator->getDefault(),
'presenter' => 'User',
'action' => 'registration',
'id' => null
));
$router[] = new Route(_('nastavenia-uctu'), array(
'lang' => $translator->getDefault(),
'presenter' => 'User',
'action' => 'profile',
'id' => null
));
$router[] = new Route(_('odhlasenie'), array(
'lang' => $translator->getDefault(),
'presenter' => 'User',
'action' => 'logout',
'id' => null
));
Absolutne sa mi to nepaci ze pre kazdu routu vytvaram novy objekt. Nieje to
mozne nejak definovat pomocou pola?
Napr.:
array(_('prihlasenie') => array('presenter' => 'User', 'action' => 'login', 'id' => NULL),
_('profil') => array('presenter' => 'User', 'action' => 'profile', 'id' => NULL),
atd...)
Editoval tolljump (29. 8. 2014 18:23)
- tolljump
- Člen | 47
Ziadny napad?
Skusim to napisat jednoduchsie a opisat len jednu situaciu…
Ako spravit taky router, ktoremu predam ako parameter len <alias>, cize www.adresa.sk/moj-alias
a podla databazovej tabulky by som si nasiel zaznam s tymto aliasom, kde by som
mal nastaveny presenter, action, id, pripadne dalsie ine parametre. Tieto
parametre by som poslal routru a on by ma uz „hodil“ na tu spravnu stranku.
Cize nechcem mat „natvrdo“ v routach zadane jednotlive typy adries, ale
kombinovat to z databazy.
- tolljump
- Člen | 47
Ja som hladal trochu hlbsie na fore a dosiel som k nazvu: SimpleSeoRouter – vyhladavanie na fore
Ak mate niekto nejake kompletne a funkcne riesenie pre Nette 2.2, ktore bude riesit aj nejaku cache toho vytvarania URL adries (aby mi to nevytvaralo stovky dotazov do databazy), tak nam prosim dajte vediet, alebo aspon „nakopnite“.
Dikyy
- mkoubik
- Člen | 728
Zkusil bych něco jako
$router[] = new Route('<slug .+>', array(
null => Route::FILTER_IN => function($params) {
// nacist z databaze podle $params['slug'];
if (nenalezeno) {
return null;
}
unset($params['slug']);
$params['module'] = '...';
$params['presenter'] = '...';
$params['action'] = '...';
$params['id'] = '...';
$params['...'] = '...';
return $params;
},
null => Route::FILTER_OUT => function($params) {
// nacist $slug z db prodle $params['module'], $params['presenter'], $params['action'], ...
if (nenalezeno) {
return null;
}
unset($params['module'], $params['presenter'], ...);
$params['slug'] = $slug;
return $params;
},
));
Editoval mkoubik (9. 9. 2014 10:57)