Jak na odkaz na jiný presenter

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

Zdravim narazil jsem na jednu malinkou věcičku/problémek…
Potřeboval bych v jednom presenteru/view/šabloně udělat odkaz na jiný presenter.
Pokud dělam odkaz na stejný presenter tak je to jasné (je to v tutoru) ale pokud chci udělat odkaz na jiný presenter tak se mě to zatim nepodařilo vykoumat…

Pokud někdo víte jak na to sem s tím.

David Grudl
Nette Core | 8218
+
0
-

$link->(destination [,arg [,arg ...]])

kde destination je
'anotherView' (odkaz na aktuální presenter a anotherView)
'AnotherPresenter:anotherView' (odkaz na AnotherPresenter a anotherView)
'AnotherPresenter:' (ozkaz na AnotherPresenter a výchozí view ‚default‘)
'AnotherModule:Presenter:view' (odkaz do jiného modulu)
A.
Člen | 87
+
0
-

Mohu se zeptat so je mysleno tim jinym modulem? Nejak nemuzu dohled, kde se nejaky modul bere v potaz.

David Grudl
Nette Core | 8218
+
0
-

Vlastně název presenteru je tvořen jako modul:submodul:presenter (těch hierarchií může být libovolné množství), což odpovídá třídě Modul::Submodul::Presenter v PHP – tedy jakmile budou jmenné prostory. Pokud se rozdělení do modulů nepoužívá, není potřeba je brát v úvahu.

deric
Člen | 93
+
0
-

Když chci vytvořit odkaz v šabloně na AuthPresenter

	{$component->link('Auth:logout!')}

tak se prohledává cesta CurrentPresenter:auth:logout, jakým způsobem se dostanu o úroveň výš?

David Grudl
Nette Core | 8218
+
0
-

Můžeš mi poslat podrobnosti? Jde o šablonu presenteru nebo vlastní komponenty? Jak se ten presenter/komponenta jmenuje?

phx
Člen | 651
+
0
-

Jde nejak udelat ony moduly a submoduly bez jmenych prostoru?

LM
Člen | 206
+
0
-

phx napsal(a):

Jde nejak udelat ony moduly a submoduly bez jmenych prostoru?

Místo :: se používá zendovská náhrada a to _, takže třeba Admin_UserPresenter (v souboru app/presenters/Admin/UserPresenter.php).

phx
Člen | 651
+
0
-

Diky…
Na tohle by bodnul nejaky poradny tutor ci fungujici API (nejak nejede).
QuickStart je sice pekny, ale moc toho nevysvetli.

deric
Člen | 93
+
0
-

David Grudl napsal(a):

Můžeš mi poslat podrobnosti? Jde o šablonu presenteru nebo vlastní komponenty? Jak se ten presenter/komponenta jmenuje?

Bylo to použité v globálním layoutu, nefungoval signal, nicméně šlo použít standartní odkaz (tam se vytvořila URI v pořádku).

WARNING: Error: Unknown signal 'HomepagePresenter:access:logout'. in 'libs/Nette/Application/Presenter.php' on line 576 (error code: 512)

Editoval deric (21. 5. 2008 9:06)

David Grudl
Nette Core | 8218
+
0
-

Už to asi chápu – to je:

  • HomepagePresenter – presenter
  • access – jmeno komponenty
  • logout – signál

Je to tak?

charoon
Člen | 1
+
0
-

deric napsal(a):

Když chci vytvořit odkaz v šabloně na AuthPresenter

	{$component->link('Auth:logout!')}

tak se prohledává cesta CurrentPresenter:auth:logout, jakým způsobem se dostanu o úroveň výš?

Mám asi stejný problém, podařilo se to nějak vyřešit?

deric
Člen | 93
+
0
-

David Grudl napsal(a):

Už to asi chápu – to je:

  • HomepagePresenter – presenter
  • access – jmeno komponenty
  • logout – signál

Je to tak?

Ano, přesně tak. Pokud logout není signál (bez vykřičníku) a je nadefinovaná příslušná fce, tak to funguje. Asi takto:

public function renderLogout(){
   Environment::getUser()->signOut();
   $this->redirect('default');
}
David Grudl
Nette Core | 8218
+
0
-

Signál (aneb subrequest) se vždy volá na aktuálním presenteru a view, tudíž není možné jej směřovat jinam.

cuga
Člen | 210
+
0
-

Mam drobny problem.

Jak tak koukam, nasel sem nekolik moznosti:

<?php

    <a href="{$component->link('Article:')}">Zobrazit články</a>	// jedna z moznosti
    <a href="{$control->link('Article:')}">Zobrazit články</a>	// dalsi z moznosti
    <a href="{$presenter->link('Article:')}">Zobrazit články</a>	// a do tretice vseho dobreho

    <a href="{$component->link('Article:add')}">Přidat článek</a>

?>

Smerovani na „Přidat článek“ funguje dobre (odkazuje se na Article.add.phtml), ale „Zobrazit články“ se mi porad snazi smerovat do sablony Default.article.pthml misto na Article.default.phtml

V cem delam chybu??? Ma vyznam, na jakem objektu metodu link() volam???

Editoval cuga (25. 10. 2008 14:50)

ViliamKopecky
Nette hipster | 230
+
0
-

Tohle nefunguje?

<a href="{$presenter->link('Article:default')}">Zobrazit články</a>

ale asi by to mělo jít i bez uvedení default.

deric
Člen | 93
+
0
-

<a href=„{$component->link(‚Article:add‘)}“>Přidat článek</a>

Zkus absolutní adresu, tj. s dvojtečkou na začátku. Takže link začíná nejvyšším presenterem v hierarchii. např.

	<a href="{link :Front:Article:add}">Přidat článek</a>

(nebo jen ‚:Article:add‘ – záleží na tom, jak to máš udělané)

Ma vyznam, na jakem objektu metodu link() volam???

Ano, to má význam. Prohledávají se odkazy směrem dolů (potomci). Předpokládám, že DefaultPresenter a ArticlePresenter jsou na stejné úrovni, proto ti Nette nenašlo potřebnou metodu

cuga
Člen | 210
+
0
-

Enoice: mel sem to tam, ale nefunguje…

deric:

Pokud dam jenom :Article: tak ho potom hleda ../presenters/ArticlePresenter.php (mel by hledat v ../presenters/AdminModule/ArticlePresenter.php)

Pokud dam Admin:Article: tak potom: Cannot load presenter ‚Admin:Admin:Article‘, class ‚Admin_Admin_ArticlePresenter‘ was not found

Nakonec pokud dam :Admin:Article: tak pak No route for Admin:Article()

deric
Člen | 93
+
0
-

:Admin:Article:

by mělo volat metodu Admin_ArticlePresenter::default()

takže asi potřebuješ

:Admin:Article:add

cuga
Člen | 210
+
0
-

Opravdu chybela routa:

<?php
$router[] = new Route('<module>/<presenter>/<action>', array(
    'module' => 'Admin',
    'presenter' => 'Default',
    'action' => 'default',
));
?>

Zatim v routach trosku plavu, ale uz to fakci…