Vytvoření odkazu na danou routu
- iwory
- Člen | 147
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
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
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
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)