odkaz s hranatými zátvorkami

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

Ahojte!
Snažím sa pomocou dokázať niečo takéto:

<a n:href="Presenter:default, odkaz[parameter] => $parameter">odkaz</a>

ladenke sa nepáčia zátvorky v odkaze. Je prosím možné vygenerovať odkaz v tomto tvare? Teda

www.nieco.com/presenter?odkaz[parameter]=nejaky_text

Ďakujem každému za pomoc

Editoval xxxmisko (16. 5. 2013 16:07)

peter.z
Člen | 37
+
0
-

Pouzi polia:

<a n:href="Presenter:default, array('odkaz' => array('parameter' => $parameter))">odkaz</a>
Šaman
Člen | 2666
+
0
-

Řekl bych, že na to jdeš od špatného konce.
Pokud vytváříš odkazy ve tvaru "Presenter:view, $params", tak se k vytvoření odkazu používá router. Takže ty skutečně předáš jen parametr podle schematu výše a jestli tam bude nějaká hranatá závorka, to řeší router.
Stejně tak při zpracování si přece neparsuješ parametry ručně a používáš Nette předávání parametrů renderFoo($param), ne?

Editoval Šaman (16. 5. 2013 16:11)

xxxmisko
Člen | 140
+
0
-

šaman: asi máš pravdu. Idem skúsiť router, poprípade vedel by si mi poradiť, ako má vyzerať?

Jan Tvrdík
Nette guru | 2595
+
0
-

Doplním, že HTTP protokol umí přenášet v parametrech pouze skaláry (tedy neumí pole). Z pohledu HTTP protokolu je tedy odkaz[parameter] (po správné escapování odkaz%5Bparameter%5D) to samé jako třeba odkaz-parameter. Speciální význam hranatým závorkám dává až PHP. Mělo by tedy bez problémů fungovat i něco jako

<a n:href="Presenter:default, 'odkaz[parameter]' => $parameter">odkaz</a>
Šaman
Člen | 2666
+
0
-

Bohužel s routerem ti neporadím, na něm provádím jen základní úpravy. Ještě bys nám mohl říct proč to potřebuješ, možná to půjde i jinak, víc Nette way.

Ale jestli jde o tvar odkazu, řeší to router a ty máš pak komfort v tom, že to vytvoří správný tvar a z tohoto tvaru ti to také je schopné vrátit Presenter, view a parametry.

Pokud by šlo o absolutní odkaz mimo aplikaci, tak tam zase nepoužíváš metodu link (která stojí za voláním makra {link}, i n:href), tam si to sestavíš ručně.

xxxmisko
Člen | 140
+
0
-

Jan Tvrdík: Ďakujem za informáciu, ten tvoj kód mi nefunguje, to nevadí, hlavne, že si mi objasnil dôvod hranatých zátvoriek.

Šaman: máš pravdu, dá sa to vyrenderovať manuálne cez link v prezentéri a potom v šablóne iba zobraziť. V každom prípade som od toho riešenia upustil, nakoľko je to na prd a nie je to „Nette way“, ako si napísal.

V každom prípade mám dosť problém celkovo v nette s prenášaním parametrov medzi jednotlivými šablónami a prezentérmi. Nenašiel som nijaký návod, okrem persistentných odkazov, ako prenášať nejaké parametre medzi stránkami.

Čo by som chcel ideálne spraviť:

odkázať sa na linku: homepage/?id=99, teda odkaz by vyzeral takto:

<a n:href="Homepage:default, id => 99 ">odkaz</a>

Ako viem zabezpečiť, aby sa po prejdení na stránku zmizlo ?id=99, ale aby som s tým parametrom mohol pracovať? Existuje na to nejaký návod? Ako persistentný parameter mi to funguje, ako obyčajná premenná mi to vydrží do prvého refreshu stránky :D

Takisto by som sa chcel opýtať na globálne premenné v nette. Viem si v config.neon, resp. niekde inde zadefinovať premenné, ku ktorým by som mal prístup kdekoľvek v aplikácii?
Boli by to premenné typu int a boolean, pričom by definovali akoby správanie systému. V obyčajnom php som na to používal buď session, alebo define(nieco, nieco).

Dakujem

Jan Tvrdík
Nette guru | 2595
+
0
-

xxxmisko wrote:

Jan Tvrdík: ten tvoj kód mi nefunguje

Tak děláš asi něco špatně, protože já když v čistém sandboxu upravím Homepage/default.latte, tak mi to bez problémů funguje.

{block #content}
<a n:href="Homepage:default, 'odkaz[parameter]' => a">odkaz</a>

Ako viem zabezpečiť, aby sa po prejdení na stránku zmizlo ?id=99, ale aby som s tým parametrom mohol pracovať? Existuje na to nejaký návod?

Vymýšlíš blbost, nastuduj si něco o tom, jak funguje HTTP protokol a co to znamená, že je bezstavový. Řešit to jde jak na straně serveru, tak u klienta pomocí JS, ale z největší pravděpodobností je to blbost.

xxxmisko
Člen | 140
+
0
-

Honzo, máš pravdu, funguje to, mal som tam blbú chybku, generoval som link v prezentéri, pričom vo výpise v šablóne mi dalo chybný odkaz. Tvoj odkaz tam bol tiež, ale nebol na poslednom mieste, preto ma to zmiatlo :D

Bezstavovosť protokolu HTTP chápem, len som myslel, že nette si všetko ukladá do cookies, session. Neviem, prečo, mal som ten pocit, musím si ešte viacej o nette načítať :D
Takže skúsim spracovať parametre v metóde render***().

A posledná vec, a síce, konfigurácia aplikácie. V config.neon mám v parameters lang: sk. Viem si tam vytvoriť inú premennú, napríklad rows: 99, pričom hocikde v aplikácii k nej budem mať prístup? Ak hej, ako? ĎAKUJEM

mildabre
Člen | 62
+
0
-

Cituji: „Ako viem zabezpečiť, aby sa po prejdení na stránku zmizlo ?id=99, ale aby som s tým parametrom mohol pracovať?“

Jde o to, co s tím id chceš udělat, pokud by jsi chtěl zobrazit třeba článek č. 99, tak potom by to url mělo zůstat beze změny. Pokud by jsi třeba chtěl smazat záznam č. 99 potom bych to udělal tak že bych:

  • smazal záznam 99
  • přesměroval na url bez id=99

Jak ale říkal Honza, je to celkově špatný přístup k věci. Pokud předáváš parametry pomocí GET, měly by tyto parametry řídit obsah, pokud potřebuješ nějakou akci v databázi apod., potom předávej tyto požadavky pomocí POST.

xxxmisko
Člen | 140
+
0
-

mildabre:

chcel som to na to, aby sa zmazal záznam. A chcel som to spraviť tak, aby nebolo jasné, ako funguje mazanie. Našťastie používam v systéme autorizáciu a nette samo rozhodne, koho kam pustí :D
Išlo mi len o to, aby niekto neskúšal kraviny, aj keď mu to zrejme nepomôže.

Ale napadla ma takáto vec, keby som chcel zachytiť predsalen nejaký parameter, tento by som si chcel uložiť a potom presmerovať na tú istú stránku bez parametra, ako by sa to riešilo? Nebudem to takto robiť, len si chcem teoreticky uvedomiť životný cyklus prezentéra, aj keď to nie je asi dobrý nápad :D

Ja by som to robil tak, že by som si v metóde renderNieco($id) toto id zachytil, dal by som tam podmienku, že ak je prázdne, nepresmeruj, ak nie je prázdne, presmeruj na Homepage:nieco bez parametra. Tento parameter by sa mi však asi stratil, nie? Alebo by bol uložený? Kde je dobré zachytávať parametre z GET?