Pop-up v komponentě? Lze nebo musím udělat jinak?

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

s Nette a MVC architekturou zatím dělám pátým týdnem, takže je pravděpodobné, že mi stále něco uniká. Mám komponentu BookList, starající se o výpis db do tabulek. Komponentu mám uloženou v

/app/components/BookList/BookList.php

/app/components/BookList/template.php

vkládám jí do aplikace pomocí továrničky. Potřeboval bych, aby v tabulce, kterou komponenta vypisuje byl odkaz otevírající pop-up, kde by byl view /app/components/BookList/popup.phtml a bylo by zde možné používat signály z komponenty. Je to možné udělat? Mohl by mi někdo poradit myšlenku, zkouším to již den a stále mě nenapadá funkční řešení.

Editoval joska (31. 5. 2010 11:48)

pave.kucera
Člen | 122
+
0
-

Myslíš pop-upem nové okno prohlížeče, anebo div plovoucí nad ostatními?

Editoval JannBaill (31. 5. 2010 20:42)

joska
Člen | 20
+
0
-

Právěže nové okno. Div bych udělat uměl, ale aplikace vyžaduje samostatné okno. Napadlo mě udělat vlastní popup presenter a v komponentě rozlišovat jestli se volá z popup.presenteru nebo odjinud. Ale nepřijde mi to uplně košér a doufám, že bude lepší řešení.

pave.kucera
Člen | 122
+
0
-

Tady mě napadá jenom tvůj způsob – ,,popup presenter", který vykreslí speciální view komponenty (defaultní vykreslí pouze odkaz a tabulku, ,,speciální" pak přímo obsah pop up okna, ať se komponenta nemusí zajímat o to jakým presenterem je spouštěna).

Ale jestli lepší řešení neexistuje, to si radši netroufám odpovědět.

Honza Kuchař
Člen | 1662
+
0
-

JS:

window.open({link mujPresenter:mojeAkce});

A v template toho mujPresenter:mojeAkce uveď na začátek

{extends none}

To způsobí, že se vyrenderuje jen samotný obsah.


Nebo ještě lépe použij

vícestupňové dědění

Rozhodně si tém uštříš spousty práce do budoucna. V @layout-minimal.phtml budeš mít jen fakt základ.

<doctype>
	<head>
	<body>
		<div class="flashmessages">
		{block #content}{/block}
		<a tak dále...>

V @layout nějaký blok, který rozšíří obsah toho @layout.phtml a na začátku bude

{extends @layout.phtml}
{block #content}
	Zde něco před původním obsahem
	{include #parent}
	zde něco po
{/block}

A v každé normální šabloně v aplikaci budeš mít buť nic (a použije se ti @layout.phtml nebo ho tam klidně můžeš pro přehlednot uvést)

{extends ../relativni/cesta/../../k/../@layout.phtml}
{block #content}
	Můj obsah šablony, který se mi zobrazí někde v designu stránky

A když budu chtít otevřít pop-up okno, tak jen udělám šablonu dědící z @layout-minimal.phtml a vyrendruje se ti do toho pop-up okna už jen obsah

{extends ../relativni/cesta/../../k/../@layout-minimal.phtml}
{block #content}
	Zde bude obsah pop-up okna

P.S.: Pokud jsi do teď používal tzn. staré šablony nebo jsi prostě jen zatím nepoužíval AJAX, tak si přečti, jak fungují zavináče: https://forum.nette.org/…iewtopic.php?…


Ad. signály: Jáv bych to řešil vytvořením abstraktní třídy presenteru, jakožto předka těch dovou presenterů:

  • PresenterSDatagridem
  • PresenterSPopupem

No a tím můžeš používat signály z abstraktního presenteru v obou presenterech co jsou v hiearchii „pod ním“.


Doufám, že jsem ti to trochu objasnil.

Uff, nějak jsem se rozepsal, doufám, že jsem odpověděl na to, na co jsi se ptal.