nepovinné argumenty u routování

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

edit: chyba byla jinde, v enkodovani url, funkční řešení v příspěvku dole

Zdravím,
potřebuji zobrazovat seznam článků, nicméně potřebuji u nich mít i seo friendly stránkování.

Dá se to vyřešit takto

<?php
$router[] = new Route('/<sekce [A-Za-z-]+>/<kategorie [A-Za-z-]+>/<stranka [0-9]+>', array(
    'presenter' => 'Clanky',
    'view'=> 'seznam',
    'stranka'=>1
));

$router[] = new Route('/<sekce [A-Za-z-]+>/<stranka [0-9]+>', array(
    'presenter' => 'Clanky',
    'view'=> 'seznam',
    'stranka'=>1
));
?>

a stranku pak předavat controleru. Nicméně pokud budu chtít zavést hlubší
dělení(podkategorie,…) budu muset vytvořit další routu.

Zkusil jsem to vyřešit tak že jsem nastavil routu ve smyslu

<?php
$router[] = new Route('/<sekce [A-Za-z-]+>/<kategorie [A-Za-z-]+>/<stranka [0-9]+>', array(
    'presenter' => 'Clanky',
    'view'=> 'seznam',
    'kategorie'=>'',
    'stranka'=>1
));
?>

s tím, že kategorie je zde nepoviná, tak bych mohl pomocí regexpu poznat pomocí této routy správně adresy
/novinky/2 i
/novinky/test/2
nicméně se mi to nepodařilo zprovoznit.
Nakonec jsem tedy zkusil

<?php
//přidané lomítko v regexpu pro sekci
$router[] = new Route('/<sekce [A-Za-z-\/]+>/<stranka [0-9]+>', array(
    'presenter' => 'Clanky',
    'view'=> 'seznam',
    'stranka'=>1
));
?>

s tím že v sekci dostanu celou adresu krom stránky (novinky/test) a pak si to sám v presenteru rozparsuju. Nicméně mi to po této úpravě hlásí vyjímku

No route for Clanky:seznam(sekce=novinky/test, stranka=1)

Nevíte někdo proč?

Editoval Aleš (31. 3. 2009 15:57)

kravčo
Člen | 721
+
0
-

Skús toto vlákno o routovaní.

Aleš
Člen | 30
+
0
-

Nemyslím si že to je podobný problém.

Routedebugger ukázal že routa je funkční, nicméně jí nedokáže zpětně použít při kontrole kanonického odkazu (aspoň doufám že to je ono, chyba je v Presenteru na řadce 1076)

Aleš
Člen | 30
+
0
-

Tak problém byl v zakódování lomítka v cestě na %2f. Viz dokumentace

konečné řešení tedy

<?php
  Route::$styles['cesta'] = array(
      Route::PATTERN => '[A-Za-z-/]+',
  );

  $router[] = new Route('/<cesta >/<stranka [0-9]+>', array(
      'presenter' => 'Clanky',
      'view'=> 'list',
      'stranka'=>1
  ));
?>
kravčo
Člen | 721
+
0
-

Aleš napsal(a):

Nemyslím si že to je podobný problém.

V tom vlákne sa riešilo i to, že nestačí dať regulárny výraz do routy, ale treba nastaviť štýl – je na to aj metóda setStyleProperty(). Hlavne, že si to vyriešil :)