nepovinné argumenty u routování
- Aleš
- Člen | 30
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)
- Aleš
- Člen | 30
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
));
?>