Problém s rozeznáním url v routeru

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

Dobrý den, je nějak možné v routeru už filtrovat url? Mám takový problém, potřebuji nějak otestovat, zdali zdané url je produkt, kde se vykreslí detail produktu, nebo kategorie, kde by se vypsala všechny produkty z dané kategorie. Případně budu rád, za jakoukoliv radu, jak to vyřešit. Změna struktury stránek bohužel není možná.

Jan Tvrdík
Nette guru | 2595
+
0
-

Ano. Dokumentaci jsi četl? Pokud filtr vrátí NULL, zkusí se další routa.

vibko
Člen | 43
+
0
-

Děkuji, netušil jsem že to bude tak jednoduché.

vibko
Člen | 43
+
0
-

Tak jsem myslel, že to bude jednoduché, ale nejsem schopný to dát dohromady :( Nemohl byste mě prosím ještě poradit? Moc nechápu práci s filtry.. Mám $router[] = new Route(‚zbozi/[<url>]‘, ‚Eshop:Product:default‘);, ale když neexistuje url zadané kategorie, tam bych chtěl, at zkusi hledat ve zboží $router[] = new Route(‚zbozi/[<url>]‘, ‚Eshop:Product:detail‘);

vibko
Člen | 43
+
0
-

V renderDefault mám nastavené,že pokud nenajde kategorii, tak funkce vrátí NULL, je to správně?

$router[] = new Route('zbozi/[<url>]', array(
			'presenter' => 'Eshop:Product',
			'action' => array(
			       Route::VALUE => 'default'
			)
		));
		$router[] = new Route('zbozi/[<url>]', array(
			'presenter' => 'Eshop:Product',
			'action' => array(
			       Route::VALUE => 'detail'
			)
		));
CZechBoY
Člen | 3608
+
0
-

@vibko FILTER_IN funkce musí vrátit null
v dokumentaci je tento příklad:

$route = new Route('<presenter=Homepage>/<action=default>', [
    'action' => [
        Route::FILTER_IN => function($action) {
            return strrev($action);
        },
        Route::FILTER_OUT => function($action) {
            return strrev($action);
        },
    ],
]);

snad pomůže

vibko
Člen | 43
+
0
-

Děkuji moc za pomoc, ale pořád jsem ztracený :( Pomohl byste mi prosím ještě, co má daná funkce obsahovat? Můj kod nyní:

$router[] = new Route('zbozi/[<url>]', array(
			'presenter' => 'Eshop:Product',
			'action' => [
			  Route::VALUE => 'default',
			  Route::FILTER_IN => function($action) {
			      return strrev($action);
			  }
			  ]
		));
		$router[] = new Route('zbozi/[<url>]', array(
			'presenter' => 'Eshop:Product',
			'action' => [
			  Route::VALUE => 'detail'
			  ]
		));