Jednoduché překreslení obsahu snippetu

Dvory59
Člen | 40
+
0
-

Ahoj. Potřeboval bych poradit s jednoduchým překreslením snippetu. Na zavolání signálu bych potřeboval změnit includovanou šablonu. Mám to takto :

Šablona

	<a class="ajax" n:href="changeSource! 1">Třída</a>
	<a class="ajax" n:href="changeSource! 2">Sekce</a>
	{snippet ruleSnippet}
		{include $latteTemplate}
	{/snippet}

Presenter:

	public function renderRuleEdit()	{
		$this->template->latteTemplate="snippetClass.latte";
	}

	public function handleChangeSource($id){
		$this->template->latteTemplate="snippetSections.latte";
		$this->redrawControl("ruleSnippet");
	}

Nepřekresluje se mi to a já moc nevím jak na to. Do snippetů jsem se ještě nedostal :/
Může mi prosím někdo poradit? Díky moc

Ondřej Kubíček
Člen | 494
+
0
-

ten include by měl být spíš obalen snippetArea – https://doc.nette.org/…ication/ajax#…
ale v tomhle případě bude i problém v tom, že v render nastavuješ šablonu a ta ti přepíše to ajax volání, které se provede dřív než render – viz životní cyklus presenteru – https://doc.nette.org/…n/presenters#…

bud bys tu render metodu musel změnit na action nebo možná nebo si tam dát podmínku pokud je ajax tak nenastavuj

Dvory59
Člen | 40
+
0
-

@OndřejKubíček
S tím renderem mě to vůbec nenapadlo, ale změnil jsem to a stále se to nemění.

HTML

	<a class="ajax" n:href="changeSource! 1">Třída</a>
	<a class="ajax" n:href="changeSource! 2">Sekce</a>
	{snippetArea ruleSnippet}
		{include $latteTemplate}
	{/snippetArea}

Presenter

public function actionRuleEdit()
	{
		if(!$this->isAjax())
		{
			$this->template->latteTemplate = "snippetClass.latte";
		}

	}
public function handleChangeSource($id)
	{
		if ($this->isAjax()){
			$this->template->latteTemplate = "snippetSections.latte";
			$this->redrawControl("ruleSnippet");
		}
	}

Když si v handlu, v podmínce dám něco vypsat třeba do debug baru, tak to normálně vypíše, ale nic se nepřekresluje :/
Nepadá někoho prosím ještě co s tím?

Editoval Dvory59 (9. 1. 2019 8:46)

Ondřej Kubíček
Člen | 494
+
0
-

já nevím jestli to takhle bude fungovat vůbec na ten include… nicméně zkoušel jsi i tu snippetArea?
když se podíváš v prohlížeči do toho requestu je v response ta správná odpověd?

Dvory59
Člen | 40
+
0
-

jj, tu snippetArea jsem tam dal, beze změny.
V response je {„state“:[]}. Přiznám se, že nevím co by tam měl správně být.
Zkoušel jsem i $this->template->setFile(‚snippetSections.latte‘);, ale taky bez výsledku.
Zkouším na to jít různě, ale nedaří se.
Nebo existuje na tohle ještě nějaká jiná metoda na změnu šablony snippetu? Zkoušel jsem prohledávat fórum, ale nepodařilo se mi najít nikoho kdo to řeší :/