odkaz s hranatými zátvorkami
- xxxmisko
- Člen | 140
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)
- Šaman
- Člen | 2666
Ř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)
- Jan Tvrdík
- Nette guru | 2595
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
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
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
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
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
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
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?