Jak na adresu: nazev-kategorie/5-muj-clanek

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

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
+
0
-

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)

motorcb
Člen | 552
+
0
-

Lexi:
Díky, tvé řešení nevypadá špatně ale já potřebuji filtr.
V budoucnu se plánuje zanořovoání sekcí do sebe, což bez filtru nezvládnu…

David Matějka
Moderator | 6445
+
0
-

defaultni pattern pro parametr je vsechno krom /, uprav routu na <id .+>

motorcb
Člen | 552
+
0
-

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?