jak v nette vytvorit link
- joseff
- Člen | 233
Zdravim, zasinam s nette a mam problem s vytvorenim linku, popsane jsou na spousty mistech, bohuzel pokazde jinde. Hned v quick stratu jsou dva:
<a href="{link this, 'showDoneTasks' => !$showDone}">
<a href="{link changeState! $todo->id}"</a>
predpokladal bych ze v ukazkove aplikaci budou jednoduche priklady, zatimco zde nevidim zadnou podobnost a bohuzel nechapu ani jeden s prikladu. V prirucce je totiz opet jiny zapis:
$this->link('show', array(10, 'en'));
obcas je vykricnik pred, obcas je za, nekdy tam je carka nenkdy ne, ale vysvetlene to bohuzle nikde poradne neni, a tak nezbiva nez to zkouset porad dokola. Na zdojaku se pise ze za linkem musi byt vzdy vykricnik, coz zjevne neni pravda. Muze mi v tom prosim nekdo udelat poradek nebo odkazat na neco co to opravdu vysvetluje? Dekuji
- Bertram
- Člen | 75
joseff napsal(a):
Zdravim, zasinam s nette a mam problem s vytvorenim linku, popsane jsou na spousty mistech, bohuzel pokazde jinde. Hned v quick stratu jsou dva:
<a href="{link this, 'showDoneTasks' => !$showDone}"> <a href="{link changeState! $todo->id}"</a>
Ten první je odkaz na aktuální presenter/akce kterému předáváš parametr s negovanou hodnotou(!)
Ten druhý je odkaz na signál (proto ten ! ),který se v presenteru jmenuje handleChangeState($id)
Mé začátečnické vysvětlení asi nebude úplně košér,ale doufám,že pomůže
- Ped
- Člen | 64
<a href="{link this, 'showDoneTasks' => !$showDone}">
obycejny link na aktualni presenter+view (this), s parametrem showDoneTasks nastavenym na hodnotu „!$showDone“ (zde je vykricnik jako klasicky PHP operator „NOT“)
<a href="{link changeState! $todo->id}"</a>
tady se tvori link na signal(action) „changeState“ s parametrem „$todo->id“, vid funkce handleChangeState($id) v presenteru.
predpokladal bych ze v ukazkove aplikaci budou jednoduche priklady, zatimco zde nevidim zadnou podobnost a bohuzel nechapu ani jeden s prikladu. V prirucce je totiz opet jiny zapis:
Link na view a link na signal se lisi tim vykricnikem za nazvem
view/signal.
Jinak je ta syntax stejna, t.j. {link view|signal! parametry} … parametry maji
nekolik variant zapisu, je to relativne benevolentni, takze nekdo tam napise
treba zbytecne uvozovky nebo nejakou carku navic, ale to nicemu nevadi.
A „z prikladu“.
$this->link('show', array(10, 'en'));
obcas je vykricnik pred, obcas je za, nekdy tam je carka nenkdy ne, ale vysvetlene to bohuzle nikde poradne neni, a tak nezbiva nez to zkouset porad dokola. Na zdojaku se pise ze za linkem musi byt vzdy vykricnik, coz zjevne neni pravda. Muze mi v tom prosim nekdo udelat poradek nebo odkazat na neco co to opravdu vysvetluje? Dekuji
Prosim te, to nemas spellcheck ve vsem browseru? Treba nezbiva? A vadi ti ze jini maji nekde najakou carku navic… :)
Vykricnik se pouziva pro linky na signaly, vid prvni odstavec tady:
https://doc.nette.org/cs/quickstart
- joseff
- Člen | 233
A ještě by mě zajímalo, proč v příručce programátora v Generování odkazů je na druhem radku napsano že pomoci link se muže vytvořit:
'AnotherPresenter:anotherAction' (odkaz na AnotherPresenter a anotherAction)
ale pak v Quick startu se píše že na odkaz na jiný presenter se
používá plink. Tak to je taky divné.
A mimochodem to anotherAction víše volá tedy actionNeco nebo handleNeco?
- Bertram
- Člen | 75
joseff napsal(a):
Moc dekuji za cenne informace, ale stale mi neni jasny roadil mezi handle a action.
tady se tvori link na signal(action) „changeState“ s parametrem „$todo->id“, vid funkce handleChangeState($id) v presenteru.
a kdy se tedy zavola actionChangeState? Ja myslel ze prave timto?
Rozdíl je v tom kdy se co provádí víc viz. dokumentace/presenter ,kde se
dočteš o životním cyklu presenteru,
což ti osobně doporučuji (-:
Nejsem si jist,ale actionChangeState() tam asi ani není.
- jasir
- Člen | 746
plink vs link – plink
tvoří odkaz na prezenter,
link
na component. Ovšem v šabloně presenteru je presenter
totožný s komponentou, tedy link === plink
. V šablonách
component je to jinak.
handle vs action – s vykřičníkem se volá signál (tedy handleXXX), bez se volá action & spol
<ot>připadá vám jako mě, že ti nováčci v Nette poslední dobou na tu češtinu fakt dlabou? Kolikrát to ani radši ani nedočtu…</ot>
- joseff
- Člen | 233
No jo no tak jsem disdebil, proto se radši snažim programovat :-). Jestě poslední dotaz. Stale nevidim prakticky zadny rozdil mezi handle a action. Oboji komunikuje s modelem a pak nasleduje render a je to. Zivotni cyklus jsem si našel
startup -> action -> beforePrepare -> prepare -> handle -> beforeRender -> render -> afterRender -> shutdown
takže vidim že action je před handle, ale že by mi to pomohlo k pochopení to tedy ne. Neni mi teď tedy jasné kdy zavolat z šablony handle a kdy action? Moc děkuji – snad je to i bez chyb :-)
- redhead
- Člen | 1313
render resp. action slouží pro vykreslení nějaké stránky například. Zatímco handly slouží k obsluze nějakých věcí té stránky. Např. action, kde zobrazuješ nějakou tabulku s hodnotami, které se dají smazat. Smazání by se pak dělalo např. přes handleDelete(). Po smazání by se, ale vykreslila action, která ty řádky zase vypíše (už bez toho, který si smazal).
Další využití handle (tzv. signálů): odhlášení uživatele, přidání položky do košíku, přihlášení/odhlášení k odběru přes email, atd..
Editoval redhead (26. 11. 2010 11:13)