Jak zajistit, aby vice URL bylo routerem nasmerovano do jedne renderAction?
- ras
- Člen | 135
Ahoj vsem,
chci vytvorit „system“ kde vice stranek (rekneme 3, ale klidne 100) bude obsluhovano skrze jednu renderAction (i jednu sablonu napr. sablona1.latte). Duvody jsou proste, obsah bude vicemene stejny, jen se bude menit jedno promennych, ktere bude presenter do sablony dodavat. Zakladem bude ale, ze vse se bude muset vycist na zaklade URL.
Priklad tech URL:
http://localhost/…ky-text-jana
http://localhost/…y-text-petra
http://localhost/…y-text-alena
V bootstrape to pak bude predklapokladam reseno pres FILTERin/out … tj. napr.
$router[] = new Route('/neco/<action>', array(
'presenter' => 'test',
'action' => array(
Route::VALUE => 'default',
Route::FILTER_IN => callback('TestPresenter::testRouterIn'),
Route::FILTER_OUT => callback('TestPresenter::testRouterOut'),
),
));
v TestPresenteru bude napr.
$jmeno[] = "Jana";
$jmeno[] = "Petra";
$jmeno[] = "Alena";
$this->template->promenna = $jmeno;
v @layout.latte pak bude napr.
{foreach $promenna as $item}
<a n:href="Test:neco1, 'jmeno'=>$item">Jmeno: {$item}</a>
{/foreach}
Otazkou, kterou jsem zatim nedokazal zodpovedet je, jak napsat ty static function testRouterIn a testRouterOut ?
Diky vsem za radu a posoupnuti spravnym smerem.
Editoval ras (2. 11. 2011 23:42)
- ras
- Člen | 135
Zatim jsem problem (asi) srazil do vyreseni situace, jak nacist v testRouterOut($renderAction) parametr, ktery se zadava do sablony, tj. to co prijde v tom $item z <a n:href=„Test:neco1, ‚jmeno‘=>$item“>, protoze testRouterOut($renderAction) obdrzi $renderAction = „neco1“ … takze jak je mozne zde nacist ten $item? (zacinam tusim, ze to mozna bude trivialni, ale ja to proste nevim).
Editoval ras (2. 11. 2011 23:45)
- ras
- Člen | 135
Diky, to je dobry napad … jedina vytka (ktera asi me trapit nebude), ze pokud tech variant „nejaky-text“ bude vice, tak pak by hrozilo velke (relativne nekonecne) mnozstvi rout a to by asi nebylo nejlepsi/nejrychlejsi.
Tj. napadne nekoho jeste neco lepsiho?
Editoval ras (3. 11. 2011 0:33)
- Felix
- Nette Core | 1245
Mozna bys me upresnit co vlastne chces.
Metody filterIn a filterOut se povetsinou pouzivaji kdyz chces reprezentovat
dlouho adresu napriklad:
example.com/tohle-je-hrozne-dlouhy-test-a-taky-uplne-naprd
napriklad do test.latte a nebo vycistit url. Popis vic tvuj pozadavek, jinak me
nepada to co uz bylo receno tady
Edit:
$router[] = new Route('/<url>-<jmeno>', array(
'presenter' => 'MujPresenter',
'action' => 'NejakaAkce',
'url' => NULL,
'jmeno' => NULL
));
to ti zaruci, ze at tam das cokoli ve formatu xxx-yyy, tak to vezme a presmeruje na akci MujPresenter:NejakaAkce.
Editoval Felix (3. 11. 2011 1:09)
- ras
- Člen | 135
To Felix: muzes pls opravit ten link, diky
Tak to zkusim popsat jinak a lepe ;o)
URL
-------
http://localhost/nejaky-text1-jana
http://localhost/nejaky-text2-jana
http://localhost/nejaky-text1-petra
http://localhost/nejaky-text1-alena
http://localhost/nejaky-text3-dasa
Vysledek
----------
TestPresenter:renderActionA, parametr = jana
TestPresenter:renderActionB, parametr = jana
TestPresenter:renderActionA, parametr = petra
TestPresenter:renderActionA, parametr = alena
TestPresenter:renderActionC, parametr = dasa
Pricemz „nejaky-text1“ muzu opravdu byt „silene-dlouhy-a-uplne-zbytecny-text-se-spoustou-pomlcek“