AJAX dialogové okno přes šablonu

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

Zdravím,

chtěl bych vytvořit dialogové okno přes AJAX. Mám představu, jak to chci udělat, ale nevím, jak to naprogramovat. V šabloně by byl {snippet dialog}{/snippet}. V presenteru bych pak měl událost handleDialog() a v této události, bych rád načetl šablonu a odeslal ji do snippetu. To nevím, jak udělat, poradí někdo a nebo je někde příklad?

Spojení dialogu ze šablony s jQueryUI by neměl být problém. No a případný formulář do šablony také umím vložit.

radekBrno
Člen | 61
+
0
-

Jak v handleru načíst šablonu už vím, ale uvedené řešení mi hlásí chybu „Possible problem: you are sending a HTTP header while already having some data in output buffer. Try OutputDebugger or start session earlier.“. Má někdo nějaký nápad?

šablona pro HomepagePresenter

<a class="ajax" n:href="simpleForm!">simpleForm</a>

{snippet simpleForm}{/snippet}

HomepagePresenter

public function handleSimpleForm() {

    if ($this->isAjax()) {

        $this->template->setFile(__DIR__ . '/template.latte');

        $this->template->showSimpleForm = true;

        $this->template->render();

        $this->invalidateControl('simpleForm');

    }

}

template.latte

<p>test</p>

{if isset($showSimpleForm)}{control simpleForm}{/if}
James_Scott
Člen | 55
+
0
-

Zkusil bych misto metody handle pouzit metodu render..
Handle by nemelo nic zobrazovat,pouze presmerovat.

radekBrno
Člen | 61
+
0
-

V dokumentaci je načtení šablony uvedeno také v metodě handle

public function handleClick($param)
{
    if ($this->isAjax()) {
        $this->template->setFile('path/to/ajax.latte');
    }
    ...
}

Moje řešení mi nevrací žádnou chybovou hlášku, takže fakt nevím, proč to nefunguje.

newPOPE
Člen | 648
+
0
-

Tu je jedno z moznych rieseni :) https://github.com/…odal-windows

radekBrno
Člen | 61
+
0
-

Díky za radu. Jediný problém vidím v tom, že obsah dialogového okna se vkládá do zdrojového kódu už při načtení stránky. Pokusil jsem se to trošku upravit.

HomepagePresenter

public function handleSimpleForm() {
    if ($this->isAjax()) {
        $this->template->displayDialog = true;
        $this->template->firstName = "Petr";

        $this->redrawControl('simpleForm');
    }
}

default.latte

{snippet simpleForm}
    {if isset($displayDialog)}{include 'template.latte'}{/if}
{/snippet}

template.latte

<p>Testovací okno</p>

<p>{firstName}</p>

Problém je v tom, že se mi obsah ‚template.latte‘ nezobrazí. Jakmile z template.latte odeberu ‚{firstName}‘ a nechám tam jen čisté HTML, tak vše běží.