jak v nette vytvorit link

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

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
+
0
-

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
+
0
-
<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
+
0
-

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?

joseff
Člen | 233
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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)

joseff
Člen | 233
+
0
-

Aháá no děkuju moc teď už je to jasný :-)