Změna celého latte blocku pomocí AJAXu

Otik
Člen | 9
+
0
-

Ahojte všichni!
Prvně se omlouvám, ale už přes 2 hodiny to tu hledám a nikde nic.

Mám problém… v layout.latte mám rozložení
<div class=„col-md-2“></div> → MENU
<div class=„col-md-10“></div> → OBSAH

Řeším obsah druhého divu → mám v něm {include content}, který mi vždy vykreslí to co chci, samozřejmě.
Dejme tomu, že mám homepage:default a homepage:remove → a chci změnit obsah blocku content na cílový.
Chtěl bych ale daný content přepsat pomocí AJAXu… obalil jsem to snippetem, zkoušel jsem různý kombinace přes handlery, ale vůbec netuším, jak na to.

Pokud by mi někdo poradil, budu hrozně rád a předem Vám všem moc děkuju za rady!
Ahooooj!

David Matějka
Moderator | 6445
+
0
-

co si obalil snippetem? melo by stacit obalit ten include content v layout a pak jej prekreslit – v podstate je jedno kde – v action, v handle, v render.

kdyztak napis, co si zkousel a jak to nefungovalo

Otik
Člen | 9
+
0
-

Mám to přesně takhle:
{snippet con}
{include content}
{/snippet}

Ve výsledku všechny cesty mě dovedli k tomu, že neumím překreslit ten snippet.

Zkoušel jsem například přes handler s argumentem cesty k .latte
Poté už ze zoufalství normální n:href=„homepage:remove“ a nějak to vymyslet v renderu v presenteru → ale nic

Mohl bych tedy poprosit o radu? Díky za reakci

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

stačí zavolat redrawControl

pokud to chceš mít celé ajaxové v rámci jednoho presenteru, tak to můžeš udělat takhle

	protected function startup()
	{
		parent::startup();

		if ($this->isAjax()){
			$this->redrawControl('con');
		}
	}

pokud přijde ajax požadavek na ten presenter, překreslí se snippet a načte se nový obsah

Otik
Člen | 9
+
0
-

A pokud bych se chtěl mezi presentery přepínat? Je tu možnost?

Pro tuto funkci je to normálně přes n:href=„homepage:remove“?

S redrawControl tu zápasím od začátku založení vlákna a pořád nic :-(

Opět děkuji za radu :-)

Editoval Otik (22. 2. 2018 23:07)

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

tak prostě to nacpeš do společného předka
nebo jinak bys to překreslení musel dělat v těch konkrétních akcí, kde to chceš. např to remove

GEpic
Člen | 566
+
0
-

No a co se stane? Nic a TRACY vypíše AJAX požadavek, nebo se provede redirect? Máš zajaxované odkazy? Jinde ti překreslení funguje?

Editoval GEpic (23. 2. 2018 8:59)

Otik
Člen | 9
+
0
-

Nevím, jestli to mám dobře, ale mám to „zAjaxované“ takhle…
$(„a“).click(function()
{
$.get(this.href);
return false;
});
Potřeboval bych to dát do nějakého předka…
Aby prostě každý n:href="" byl zajaxovanej a změnil se mi pouze danej snippet

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

Aha, ty nepoužíváš nějakou knihovnu na Ajax přímo pro Nette? Pak ti to nemůže fungovat, nepřekreslí se ti snippety. Navíc v tom tvém kódu jen zavoláš tu adresu a dál nic
Mrkni na na tuhle stránku jak se pracuje s ajaxem v nette https://doc.nette.org/…ication/ajax

A použij nette.ajax.js, nittro nebo něco

Otik
Člen | 9
+
0
-

Moc se omlouvám, měl jsem špatně naimplementovanou knihovnu. Nevěděl jsem, že musí být přesně pro nette.
Moc děkuji všem za odpovědi a rady!!