aplikacia ajaxu v navigacii stranky

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

Neviete mi niekto poradit ako mam jednoducho aplikovat ajax aj na položky v navigacii(to znamena aby po kliknuti na polozku v hlavnom menu sa nenacitavala znova cela stranka ale iba obsah stranky) ?

Stene
Člen | 6
+
+2
-

V šabloně stačí obalit include snippetem:

{snippet content}
	{include content}
{/snippet}

v presenteru pak invalidovat snippet:

public function actionFoo()
{
	if ($this->isAjax()) {
		$this->redrawControl('content');
	}
}

Pokud používáš již nějaký existující javascript pro handling ajaxu, pak stačí jen nabindovat události click na položky v menu.

Pokud ne, příklad v jquery:

$('#menu > li > a').click(function(e) {
	e.preventDefault();

	$.get($(this).attr('href'), function(payload) {
		if (payload.snippets) {
			for (var id in payload.snippets) {
				$('#' + id).html(payload.snippets[id]);
			}
		}
	});
});

Editoval Stene (4. 9. 2015 20:29)

Matej123
Člen | 150
+
0
-

ano tomu rozumiem, ale neviem to realne sfunkcnit , ked mame nieco take v sablone, v menu :

<li><a class=„ajax“ n:href=„:Core:Article:list“>Články</a></li>

ako mam z toho urobit ajaxove volanie(co namiesto :Core:Article:list ?) a v ktorom presenteri mam potom spracovavat tieto ajaxy z menu(alebo v kazdom osobitne?)? poznamaka: jQuery mam vyrieseny, ide mi hlavne o tu cast v nette.

Dakujem.

Stene
Člen | 6
+
0
-

Adresa v menu zůstává stejná, tedy „:Core:Article:list“. V ArticlePresenter pak v akci actionList (případně renderList) stačí přidat již zmíněný kód. Více nastavovat netřeba – pokud do nette proteče ajax request, vrátí se v response pouze invalidované snippety formou JSONu. Pokud to ajax nebude, vrátí se standrtní obsah.

public function actionList()
{
	...

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

Editoval Stene (4. 9. 2015 21:08)

Matej123
Člen | 150
+
0
-

Dakujem velmi pekne , uz mi to funguje ;)