Přepis podmínek pro routování v Nette
- Taps
- Člen | 168
Zdravím, v bootstrap mám níže uvedený zápis pro routování
if (isset($_SERVER['NETTE_HTACCESS'])) { // FastCGI
$container->router[] = new Route('index.php', 'Front:News:news', Route::ONE_WAY);
$container->router[] = $adminRouter = new RouteList('Admin');
$adminRouter[] = new Route('admin/<presenter>/<action>[/<id>]', 'Info:default');
$container->router[] = $frontRouter = new RouteList('Front');
$frontRouter[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
//$frontRouter[] = new Route('clanek/<presenter>', 'Homepage:clanek');
} else {
$container->router = new SimpleRouter('Front:Base');
}
a potřeboval bych do routování připsat níže uvedená pravidla, které jsem měl doposud v htaccessu. Studoval jsem návod ohledně routování, ale bohužel se mi nepodařilo zprovoznit níže uvedená pravidla pro routování
RewriteRule ^([^/]+)/?$ ?page=$1
RewriteRule ^zapasy/([^/]+)?/?$ ?page=zapasy&league=$1 [L]
RewriteRule ^archiv-clanky/([^/]+)?/?$ ?page=archiv-clanky&rok=$1 [L]
#detaily hráčů
RewriteRule ^hrac/([^/]+)?-([^/]+)?/?$ ?page=detailHraci&IDplayer=$1&jmeno=$2 [L]
RewriteRule ^hraci/([^/]+)?/?$ ?page=hraci&liga=$1 [L]
#číslování v diskuse
RewriteRule ^diskuse/([^/]+)?/?$ ?page=diskuse&strana=$1 [L]
#reakce
RewriteRule ^reakce/([^/]+)?/?$ ?page=diskuse&idx=$1 [L]
#clanky
RewriteRule ^clanky/([^/]+)?/?$ &nazev=$1 [L]
Ještě dodám že aplikaci mám rozdělenou zvlášt na veřejnou a administrační část.
Editoval Taps (15. 4. 2012 11:45)
- nanuqcz
- Člen | 822
Ahoj,
myslím, že by bylo potřeba ještě říct, jakou bys chtěl mít strukturu
presenterů a akcí, ale pro představu, třeba takhle:
// RewriteRule ^([^/]+)/?$ ?page=$1
$frontRouter[] = new Route('[<presenter>]', 'Articles:default');
// RewriteRule ^zapasy/([^/]+)?/?$ ?page=zapasy&league=$1 [L]
$frontRouter[] = new Route('zapasy[/<league>]', 'Matches:default');
// RewriteRule ^archiv-clanky/([^/]+)?/?$ ?page=archiv-clanky&rok=$1 [L]
$frontRouter[] = new Route('archiv-clanky[/<year>]', 'ArticlesArchive:default');
Na ostatní routy už určitě přijdeš sám, je to pořád na stejné brdo :-)
P.S. názvy proměnných i názvy presenterů jsem rovnou překládal do angličtiny, je to takovým dobrým Nette zvykem :-)
- Taps
- Člen | 168
Díky za info
přidal jsem tedy
$frontRouter[] = new Route('clanky[/<nazev>]', 'Clanky:default');
odkaz mám v tomto tvaru
<a n:href="clanky/{$clanek->url}">celý článek</a>
a zobrazuje se mi chyba
<a href="error: No route for Front:Homepage:clanky/nazevclanku()
kde by mohl být problém ?
- Taps
- Člen | 168
Díky za info
přidal jsem tedy
$frontRouter[] = new Route('clanky[/<nazev>]', 'Clanky:default');
odkaz mám v tomto tvaru
<a n:href="clanky/{$clanek->url}">celý článek</a>
a zobrazuje se mi chyba
<a href="error: No route for Front:Homepage:clanky/nazevclanku()
kde by mohl být problém ?
- nanuqcz
- Člen | 822
Do n:href
(což je to samé, jako makro {link})
se dávají jen cesty (ne celá URL) ve tvaru Presenter:action
.
V tvojem případě tedy
<a n:href="Clanky:default, nazev => $clanek->url">celý článek</a>
…doporučuju si jako první projít Quickstart, kde je i tento problém krásně vysvětlen :-)