Posilani html ajaxem – prepinani dvou dynamickych menu v 1 snippetu?
- F1nc
- Člen | 4
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
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
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)
- Rob Bob
- Člen | 60
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)