Jak poslat HTML z presenteru do šablony – AJAX?

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

Ahoj,
snažím se vytvořit proces, kdy se po kliknutí na určitý button v šabloně default.latte otevře modální okno do kterého se načte HTML z databáze (případně jiná šablona) přes AJAX. Jednou bych chtěl mít v modálním okně jen formátovaný text a podruhé zase formulářovou komponentu. V té spoustě informací tady na fóru i jinde jsem se nějak ztratil.

Metoda v presenteru:

public function handleModal($id)
	{
       if( $this->isAjax() ) {
			$this->template->item = $this->db->table('items')->get($id);
			$this->invalidateControl('modal');
       } else {
			// show form
		}
	}

Šablona:

<button type="button" class="ajax" n:href="modal! 1" data-toggle="modal" data-target="#myModal">Show modal</button>

<div class="modal fade" id="myModal">
	<div class="modal-dialog">
		<div class="modal-content">
			{snippet modal}
				{if isset($item}{$item->content}{/if}
			{/snippet}
		</div>
	</div>
</div>

A v JS mám jen:

$.nette.init();

jQuery i Nette.ajax.js mám nalinkovaný správně. Jen mi přijde, že jsem nějaký krok vynechal.

Předem díky za rady.

TomasHalasz
Bronze Partner | 79
+
0
-

V té šabloně máš chybu. Chybí ta závorka u funkce isset.

{snippet modal}
    {if isset($item)}{$item->content}{/if}
{/snippet}

Ale to bude asi jen překlep ne?

Jinak podle mě tím, že máš uložená kód v databázi si připravuješ perné chvilky :-) Hlavně u formulářů pak můžou být problémy s validací apod.. nechal bych Nette ať generuje kód, pokud je to možné.

Do šablony bych dal dovnitř {snippet modal} podmínku, která by určila co se má vykreslit, jesli obsah nebo formulář. Nette to pak při invalidaci vygeneruje znovu a pošle v odpovědi na ajax požadavek a samo překreslí v prohlížeči.