Posilani html ajaxem – prepinani dvou dynamickych menu v 1 snippetu?

F1nc
Člen | 4
+
0
-

Ahoj, vazne bych potreboval nasmerovat jak zachazet s ajaxem v Nette, konkretne:

Mam hlavni (uvodni) stranku. V ni chci mit jakysi rozcestnik A v podobe odkazu vygenerovanych foreachem (potrebuji IDcka a labely tahat z DB). Jakmile kliknu na nektery z odkazu, mel by se cely ten div/blok rozcestniku A prekreslit/vymenit za rozcestnik B. Ten by mel fungovat stejnym zpusobem, akorat bude cucat jinou tabulku DB. Soucasti toho rozcestniku B by mela byt sipka Zpet, ktera zpatky ten rozcestnik B prekresli na rozcestnik A.

Ajax jsem si uz zprovoznil, normalne na promenny mi funguje, ale s timhle se peru. Dokumentaci a dotazy na podobny priklady jsem uz samozrejme cetl, ale nejak to nedokazu vstrebat. Hodil by se nejakej osekanej priklad s kodem a detailnejsim vysvetlenim, abych se mel od ceho odrazit a mohl se doptavat pripadne dal.

Diky predem.

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

jen rychlý nástřel, normálně si vytvoříš snippet, foreach pro items, nette.ajax zavěsí na třídu ajax, to zajistí ajaxové volání, dojde to do handle metody, tam si nastavíš nové položky jak potřebuješ a překreslíš snippet

<ul n:snippet="nazeSnipetu" n:inner-foreach="$items as $item">
<li><a n:href="nejakySignal!, $item->id" class="ajax">{$item->label}</a></li>
...

použiju nette.ajax.js

<script>
$.nette.init();
</script>
public function handleNejakySignal($id)
{
// provedeš co potřebuješ
$this->template->items = ... //nové položky
$this->redrawControl('nazevSnipetu');
}

Editoval Ondřej Kubíček (3. 2. 2018 17:24)

F1nc
Člen | 4
+
0
-

Kolem tohoto reseni jsem tak trochu krouzil… nicmene mezi strukturou obou menu (resp. jejich linku) je jemny rozdil. Proto se mi spise honilo hlavou mit zvlast sablonu s temi menu, v handlu udelat query na DB, to poslat do te oddelene sablony… a tu vyrenderovat ve snippetu. Pokud to ovsem jde.

Pac oproti menu B to menu A taha z DB o neco vic (a dalsi „atributy“/informace asi budu muset jeste pridat) + potrebuji obe menu resit vizualne jinak + z menu A na menu B by to melo jit pres ajax, ale kdyz kliknu na link v menu B, tak uz bude href ne-ajaxovej (vzhledem k tomu, ze budu odkazovat na page, ktera je z 90 % obsahu jina, navic tam potrebuji mit zmeny v adresnim radku prohlizece, aby si uzivatel mohl zkopirovat URL…).

Coz jsem asi mel prvne uvest, lec zapomnel jsem. Omlouvam se.

Editoval F1nc (3. 2. 2018 22:23)

F1nc
Člen | 4
+
0
-

Dotaz bohuzel stale trva. Krom toho, ze jsem si to rozkopal, jsem se dal nepohnul. :o)

Rob Bob
Člen | 60
+
0
-

Můžeš mít ty šablony uložené zvlášť jako .latte soubory a potom je v kódu includovat, tak že v proměnné budeš mít název šablony {include $menuTplName}. V action metodě proměnou inicializuješ na hodnotu $this->template->menuTplName = "menuA.latte"; nebo $this->template->menuTplName = "menuB.latte"; podle nějakého parametru, případně to nastavíš v handle* metodě. Plus samozřejmě načteš odpovídající data.

Editoval Rob Bob (5. 2. 2018 16:02)

F1nc
Člen | 4
+
0
-

Tohle zni zajimave. Jakmile budu mit moznost to vyzkouset, urcite zkusim. Zatim diky!