Změnit presenter podle parametru

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
double
Člen | 14
+
0
-

Zdravím,

rád bych poprosil moudřejší o názor, resp. návod na řešení. Potřebuji mít adresu ve tvaru
\o-nas
\kategorie
\kategorie\produkt

Je jasné, že z tohohle nemám šanci poznat, jaký se má použít presenter. Callback u ROUTE::VALUE použít nemůžu a asi největší chybu vidím v tom, že mi nette vrací vyjímku Missing presenter in route definition
Proč? Kdyby vracel prostě NULL, pak by se použila další routa a já bych měl problém vyřešen.

Něco ve stylu, kde bych si vytvořil překladovou tabulku a vrátil vždy presenter. Pokud by se nenašel, výsledek by byl null a použil by se klasický router

<?php

$router[] = new Route('[<url>]', array(
  'module' => 'Front',
  'presenter' => array(
      Route::FILTER_IN => callback($seoRouter, "getOne"),
      Route::FILTER_OUT => callback($seoRouter, "getTwo")
    ),
  'action' => 'default',
  'id' => NULL,
));
$router[] = new Route('<presenter>/<action>[/<url>]', array(
  'module' => 'Front',
  'presenter' => 'Homepage',
  'action' => 'default',
  'id' => NULL,
));

?>

Díky všem za nápady, jak o řešit

mkoubik
Člen | 728
+
0
-

Protože nikde v tom [<url>] proměnnou presenter nemáš, tak se nemá co nahrazovat. Když to změníš na [<presenter>], tak by to možná mohlo fungovat.

double
Člen | 14
+
0
-

Díky za odpověď, ale v linku url je.
Dokonce když použiji něco ve stlu latte {link „Homepage:default“ $url} tak jej Nette správně přeloží na \url

jtousek
Člen | 951
+
0
-

Nestačilo by odchytat ty adresy typu o-nas pomocí FILTER_TABLE a FILTER_STRICT a vše ostatní poslat na CategoryPresenter?

double
Člen | 14
+
0
-

Díky, toho jsem se bál – jde mi o rychlost a presenterů může být časem dost. Tak nejspíš podědím Router a stop tabulku dám do match.

Pokud by někdo někdy hledal řešení, tak v action to není, je to skutečně v presenteru

<?php
$router[] = new Route('<url>', array(
  'module' => 'Front',
  'presenter' => array(
      Route::VALUE => 'Text',
      Route::FILTER_TABLE => array(
          'o-nas' => 'Text'
      ),
        Route::FILTER_STRICT => TRUE
    ),
  'action' => 'default'
));
?>

Editoval double (9. 7. 2012 17:41)

jtousek
Člen | 951
+
0
-

Pokud ty adresy typu o-nas vesou na různé presentery tak budeš potřebovat jednu routu pro každý presenter. A ta FILTER_TABLE by imho měla být v action.