Jak na helper unvitř n:href?

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

Pokouším se použít helper webalize uvnitř n:href makra, ale nejsem schopen přijít na to jak to zapsat.
Tohle samozřejmě nefunguje.

<a n:href="Presenter:action $item->name|webalize">..</a>

Šlo by to řešit pomocí capture, ale to asi nebude best practice, že ano.

Peetee
Člen | 75
+
0
-

Nemyslím, si že je dobrý nápad jako jediný parametr posílat $item->name|webalize, protože nemáš zajištěno, že se z více položek nebude generovat stejné URL. Zaměřil bych se na to, abych webalize nemusel použít.

Možné řešení: předpokládám, že $item taháš z DB – přidal bych do tabulky sloupec a už při ukládání(vytváření/editaci) bych z name udělal přes webalize url-name. Pokud nad sloupcem uděláš unique index, máš jistotu, že pro jedno URL může být jen jeden výsledek…

Editoval Peetee (21. 11. 2011 12:11)

Filip Procházka
Moderator | 4668
+
0
-

Latte je dělané tak, že ty modifikátory na konci platí pro celý výraz.

<a n:href="Presenter:action $item->name|webalize">..</a>

Můžeš si to představit, jako kdyby jsi napsal

<a n:href="webalize(Presenter:action $item->name)">..</a>

Což je blbost, že? :)

Řešením je udělat si například další vlastnost toho objektu, kde budeš mít svou url připravenou. Nebo ještě lépe, předáš si tam jenom IDčko a dořešíš pomocí filtrů.

<a n:href="Presenter:action $item->id">..</a>
jf71
Člen | 11
+
0
-

Peetee napsal(a):

Nemyslím, si že je dobrý nápad jako jediný parametr posílat $item->name|webalize, protože nemáš zajištěno, že se z více položek nebude generovat stejné URL. Zaměřil bych se na to, abych webalize nemusel použít.

Možné řešení: předpokládám, že $item taháš z DB – přidal bych do tabulky sloupec a už při ukládání(vytváření/editaci) bych z name udělal přes webalize url-name. Pokud nad sloupcem uděláš unique index, máš jistotu, že pro jedno URL může být jen jeden výsledek…

Naprosto chápu a souhlasím. Já jsem to pro příklad zjednodušil. Samozřejmě v URL je unikátní ID, podle kterého identifikuju záznam v DB. Jen chci do URL přidat název, kvůli dobrému pocitu a Google. A řikal jsem si, že když tady máme krásné webalize, tak ho využiju a nebude to stát nic. Dělat kvůli tomu další sloupec v databázi je něco, čemu jsem se chtěl vyhnout.

jf71
Člen | 11
+
0
-

HosipLan napsal(a):
Řešením je udělat si například další vlastnost toho objektu, kde budeš mít svou url připravenou. Nebo ještě lépe, předáš si tam jenom IDčko a dořešíš pomocí filtrů.

<a n:href="Presenter:action $item->id">..</a>

To je na mě zatim trochu těžká písemka. Jak jsem psal, tu webalized hodnotu jsem do URL chtěl přidávat pouze pro přehlednost, ne jako parametr. Odkaz by vypadal example.com/item/12345/item-name s tim že item-name by bylo pro aplikaci irelevantní.

Spíš mě překvapilo, že v Latte nefunguje

{var $foo = $bar|webalize}

Každopádně díky za ochotu a odpovědi.

Aurielle
Člen | 1281
+
0
-

Bude ti vznikat duplicitní obsah, pokud si to na straně aplikace neošetříš.

petr.pavel
Člen | 535
+
0
-

jf71 napsal(a):
Spíš mě překvapilo, že v Latte nefunguje

{var $foo = $bar|webalize}

To mě taky udivilo. Aspoň, že funguje

{var $foo = NStrings::webalize($bar)}