Jak poslat HTML z presenteru do šablony – AJAX?
- C00kiemonster
- Člen | 1
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
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.