Routy – parametr, který v url musí být vždy
- dan542
- Člen | 5
Píšu vícejazyčný web, kde mám některé stránky natažené z databáze (Homepage:default – jedna šablona) a jiné s vlastní logikou (a šablonou) (Homepage:home, Homepage:news). Některé ze stránek natažených z databáze mají levé menu, v databázi mají název ve tvaru stránka_podstránka, ale chtěl bych aby v url byly ve tvaru /jazyk/stránka/podstránka místo /jazyk/stránka_podstránka.
Zatím mám routy asi takhle:
$router[] = new Route('[index.php]?view=<page>', 'Homepage:default', Route::ONE_WAY);
$router[] = new Route('index.php', 'Homepage:default', Route::ONE_WAY);
$router[] = new Route('<lang=en>/news/', 'Homepage:news');
$router[] = new Route('<lang=en>/home/', 'Homepage:home');
$router[] = new Route('<lang=en>/<page>/[<page_under=>/]', 'Homepage:default');
$router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
omlouvám se za čanglické názvy :)
Bohužel když jdu na stránku /en/stránka, tak mě to přesměruje na /stránka a když na /en/stránka/podstránka, tak mě to také přesměruje na /stránka/podstránka, ale presenter si pak myslí že stránka je jazyk a podstránka stránka :( A news a home se mi přesměruje na /, takže zase špatně, chtěl bych /en/home a /en/news. Jak mám parametr lang nastavit, aby se v url používal pořád. PS: lang mám jako persistentní proměnou.
- nanuqcz
- Člen | 822
Než odpoví někdo zkušenější, můžeš místo
<lang=en>/
zkusit jen <lang>/
,
nebo [!<lang=en>/]
(hlavně ten druhý způsob mě zajímá jestli bude fungovat, podle dokumentace by měl)
Editoval xxxObiWan (27. 8. 2011 20:32)
- dan542
- Člen | 5
Zajímavé je že když použiji
'[!<lang=en>/][<page>/][<page_under=>/]'
, tak
fungují stránky, bohužel podstránky ne – vynechávají /en/
(na [!<lang=en>/]
nezáleží). Pro routy na news a home
jak Po nahrazení [news/], [home/] za news/, home/ nefunguje vůbec,
ale podstránky ano…[!<lang=en>/]
, tak <lang>
přesměrovávají na /en/
, vždy se zobrazí news (jsou před
home).
Editoval dan542 (27. 8. 2011 21:00)
- dan542
- Člen | 5
Vyřešeno, tohle
$router[] = new Route('[index.php]?view=<page>', 'Homepage:default', Route::ONE_WAY);
$router[] = new Route('index.php', 'Homepage:default', Route::ONE_WAY);
$router[] = new Route('[!<lang=en>/]news/', 'Homepage:news');
$router[] = new Route('[!<lang=en>/]home/', 'Homepage:home');
$router[] = new Route('[!<lang=en>/]<page>/[<page_under=>/]', 'Homepage:default');
$router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
mi funguje.
- dan542
- Člen | 5
Měl bych ještě jeden dotaz, ale nechce se mi zakládat nové téma. Nebylo by z hlediska struktury aplikace lepší mít 3 presentery: DatabasePagePresenter (ten by načítal stránky z db), NewsPresenter a HomePresenter? Teď totiž řeším, že když jsem na stránce news, a chci si určitou novinku rozkliknout, tak mi jako nejčistčí řešení připadá přidat novou šablonu. Bez přidání šablony mě napadá, že bych šabloně předal parametr, a v šabloně bude if, které rozhodne jak to má vykreslit. To druhé řešení se mi však vůbec nelíbí.
Editoval dan542 (28. 8. 2011 17:34)