Vytvoření odkazu na danou routu

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

Zdravím, mám problém s vytovřením routy:

Respektivě mám routu:

$router = new RouteList('Umbrella');

$router[] = new Route('nase-produkty[/<categoryID [0-9]>-[<categoryName>]]', array(
  'presenter' => 'Product',
  'action' => 'default',
  'categoryID' => NULL,
  'categoryName' => NULL
));

Akceptuje to v pořádku adresy typu:
/nase-produkty
/nase-produkty/4
nase-produkty/5-nazev-kategorie

Ovšem je problém při vytvoření odkazu:
{plink Product categoryID=>4, categoryName=>‚jmeno-kategorie‘}

Vytvoří následující odkaz: product/product?categoryID=4&categoryName=jmeno-kategorie

Dělám něco špatně? Nebo se mýlím v tom, jak routy používat?

Ještě jeden malej dotaz:
Napsal jsem si měnší funkci na seo která vytváří řetězce do adresy: (tohle je krádný kůn ⇒ tohle-je-krasny-kun)
Mám jí dostupnou i přes helper.
Je možné ji nějak dostat dodo plinku aby se z něho tvořila adresa?
např: {plink Product categoryID=>4, categoryName=>$categoryName|seoUrl}

Nebo je uplně jiný princip vytváření adres typu /543-tohle-je-pekna-adresa aniž bych ten název musel takhle držet třeba v db?

Díky moc za rady…

David Matějka
Moderator | 6445
+
0
-

Jelikoz routa pro Product:default je pro modul Umbrella, musis stejne tak tvorit linky

{plink :Umbrella:Product: ...}

co se tyce seo url, na to jsou vhodny filtry

a vysvetleni, proc ten helper nefunguje tak, jak ho pouzivas – helper se aplikuje na cely vysledek makra, nejde na jednotlive casti. Necha se to obejit pomoci:

{plink ... categoryName => $template->seoUrl(..)}

ale v pripade linku tenhle zpusob neni spravny, pouzij radeji filtry

Editoval matej21 (15. 12. 2013 0:58)

iwory
Člen | 147
+
0
-

matej21 napsal(a):

Jelikoz routa pro Product:default je pro modul Umbrella, musis stejne tak tvorit linky

{plink :Umbrella:Product: ...}

co se tyce seo url, na to jsou vhodny filtry

a vysvetleni, proc ten helper nefunguje tak, jak ho pouzivas – helper se aplikuje na cely vysledek makra, nejde na jednotlive casti. Necha se to obejit pomoci:

{plink ... categoryName => $template->seoUrl(..)}

ale v pripade linku tenhle zpusob neni spravny, pouzij radeji filtry

Za dnešek máš u mě už dvě pomoci, díky :-)

iwory
Člen | 147
+
0
-

Tak ještě né tak úplná výhra :-/

Překlad funguje výborně, ale…

Route::addStyle('title');
Route::setStyleProperty('title', Route::FILTER_OUT, function($url)
{
    return Strings::webalize($url);
});

Route::setStyleProperty('title', Route::FILTER_IN, function($url)
{
    return Strings::webalize($url);
});

$router = new RouteList('Umbrella');

$router[] = new Route('produkt/<productID [0-9]>-<title>', array(
  'presenter' => 'Product',
  'action' => 'detail',
  'productID' => NULL,
  'title' => NULL
));

$router[] = new Route('nase-produkty[/<categoryID [0-9]>[-<title>]]', array(
  'presenter' => 'Product',
  'action' => 'default',
  'categoryID' => NULL,
  'title' => NULL
));

Odkaz na nase produkty se vytvoří v pořádku

{plink :Umbrella:Product:Default categoryID=>4, title=>'Tašky a kabelky'}

ale odkaz na samostatný produkt vůbec :-/

{plink :Umbrella:Product:Detail productID=>36, title=>'Taška černá'}

Ten vytvoří: product/detail?productID=36&title=Taška+černá

Přitom když zadám přímo produkt/36-taska-cerna, tak se routa v pořádku použije.
Už si tak trochu nevím rady

namespace App\UmbrellaModule;

class ProductPresenter extends BasePresenter
{
    public function renderDefault($categoryID, $title)
    {

    }

    public function renderDetail($productID, $title)
    {

    }
}

Editoval iwory (15. 12. 2013 2:04)

akadlec
Člen | 1326
+
0
-

Jen palba od boku, neměl by se action psát s malým na začátku?

{plink :Umbrella:Product:detail productID=>36, title=>'Taška černá'}