Jak na adresu: nazev-kategorie/5-muj-clanek
- motorcb
- Člen | 552
Zdravím.
jak na adresu pro blog kde každý článek musí být v 1 kategorii.
nazev-kategorie/5-muj-clanek
Zkouším to takto:
$router[] = new Route( '<id>', array(
'module' => 'Blog',
'presenter' => 'Article',
'action' => 'detail',
'id' => array(
Route::FILTER_IN => $this->routerHelper->filterIn,
Route::FILTER_OUT => $this->routerHelper->filterOutBlog
)
) );
routerHelper:
public function filterIn( $param )
{
$arrayParam = explode( "-", $param );
return @$arrayParam[count($arrayParam)];
}
public function filterOutBlog( $blogId )
{
$blogRow= $this->blogRepository->find( $blogId );
if ( $blogRow!== FALSE )
{
return $blogRow->category->shlug."/".$blogRow->shlug."-".$blogRow->shlug;
}
else
{
return $blogId;
}
}
Ovšem tento kód se vůbec nevykoná.. Rouser ho vůbec neaxceptuje
(v tracy moji routu vidím)…
Když jdu na adresu: moje-kategorie/70-zbozi dostanu zpět: No route for HTTP
request
V Tracymoji routu vidím ale nikdy se nevykoná. Co dělám špatně?
Díky za info
- Jan Mikeš
- Člen | 771
Samozrejme, mas pouze <id> v route, to ti nemuze nikdy fungovat. Nepostacovalo by ti toto, bez filtru?:
// nazev-kategorie/5-muj-clanek
$router[] = new Route( '<categoryCode>/<id>-<blogPostCode>', array(
'module' => 'Blog',
'presenter' => 'Article',
'action' => 'detail',
) );
S tim, ze do db si budes po pridani kategorie a blog postu ukladat code „slug“:
$code = Nette\Utils\Strings::webalize($values["name"]);
S unique keyem v db by to melo fungovat perfektne – ja pouzivam timto zpusobem a pohoda.
Editoval Lexi (1. 4. 2014 11:56)
- David Matějka
- Moderator | 6445
defaultni pattern pro parametr je
vsechno krom /
, uprav routu na <id .+>
- motorcb
- Člen | 552
matej21:
uprav routu na
<id .+>
díky, to zabralo :-) ted uz se mi odkazy generuji ve spravnem tvaru. Ovsem
kdyz na odkaz kliknu:
/novinky/70-muj-prvni-clanek
Tracy mi vrátí: No route for HTTP request.
pritom v Tracy v pravo dole vidim, moji routu, nechápu proč není použita:
//blog.mojedomena.cz/<id .+>
Nevěděl by někdo?