Ajax, Naja, překreslení komponenty ⇒ co s URL?

Kcko
Člen | 465
+
0
-

Ahoj,
jak řešíte ajaxové překreslení formuláře s GET parametry, tak aby dávaly smysl?

Když ajaxově odešlu formulář v komponentě, tak si jeho obsah uložím do persistentní proměnné ($this->f) a překreslím příslušné snippety.
Vše je funkční včetně stránkování. Ale nelíbí se mi moc URL, klasická url po odeslání formuláře GETem + věci navíc (jméno komponenty, a tlačítko submitu).

**?f%5Btype%5D%5B%5D=0&f%5Blocation%5D%5B%5D=0&f%5Bdisposition%5D%5B%5D=0&f%5Bsize%5D%5B%5D=0&do=realtyList-filterForm-submit&search=Hledat
**

Kdyby to byl presenter a nerešil bych to ajaxove tak si to přesmeruju na tu samou akci s parametrem F a ta URL bude vypadat líp.

V případě ajaxu a komponenty nevím co s tím, forward mi nepomůže. Řešíte to nějak? nebo neřešit.

$form->onSubmit[] = function ($form) {

			$this->page = 1;
			$this->f = $form->getValues()['f'];
			$this->redrawControl('list');
			$this->redrawControl('pager');
		};
Pavel Kravčík
Člen | 1180
+
0
-

Pokud jde o to mít ji hezkou, tak možná stačí router. Případně, pokud Tě nezajímá, co tam je – tak history.api. Nebo nějaký převodník (např. productList=1–2–3–4), vypadá to líp než %5D%5B%5D.

Kcko
Člen | 465
+
0
-

Pavel Kravčík napsal(a):

Pokud jde o to mít ji hezkou, tak možná stačí router. Případně, pokud Tě nezajímá, co tam je – tak history.api. Nebo nějaký převodník (např. productList=1–2–3–4), vypadá to líp než %5D%5B%5D.

Ahoj, dík za odpověd.
Router zní jako odpověd, ale asi jsem se ptal něco jiného, špatně jsem to vysvětlil.

Jestli je ekvivalent tohohle kódu v komponentě odeslané ajaxem.

$form->onSubmit[] = function ($form) {

			$this->page = 1;
			$this->f = $form->getValues()['f'];
			$this->presenter->redirect('default', ['filters' => $this->f, 'page' => $this->page]);
		};

Jinak Naja si aspoň s tou první podobou poradí dobře (formulář je ajaxový, nastavený na GET), takže o parametry nepřijdu a fungují i když někomu pošlu URL, jen jsem se chtěl zbavit dalších parametrů v URL, které generuje Nette jako odeslání formuláře a případně tu URL ještě zlepšit.

Ale primárně mě zajimá ten ekvivalent.

mystik
Člen | 284
+
0
-

Nejsem si jistej jestli rozumim. Jde o to po submitu formukare presmerovat na nejakou hezkou URL co vygeneruje stejny obsah? Pak je potreba to resit na urovni presenteru. Po odeslani komponenty presmerovat na akci presenteru s parametry co vykresli vysledek stejne jako kdyby to bylo na urovni presenteru. Samotna podoba URL se signalem pro komponentu musi obsahovat parametry ktere urcuji o jaky signal jde.

Kcko
Člen | 465
+
0
-

mystik napsal(a):

Nejsem si jistej jestli rozumim. Jde o to po submitu formukare presmerovat na nejakou hezkou URL co vygeneruje stejny obsah? Pak je potreba to resit na urovni presenteru. Po odeslani komponenty presmerovat na akci presenteru s parametry co vykresli vysledek stejne jako kdyby to bylo na urovni presenteru. Samotna podoba URL se signalem pro komponentu musi obsahovat parametry ktere urcuji o jaky signal jde.

Ahoj, ano, rozumíš tomu dobře, vyjadřoval jsem se jako hotentot :)

Máš pravdu, přesměrovat na presenter na nějakou hezčí URL bez věcí, které mi generuje samotný formulář komponenty a v presenteru pak komponentu přes tyto parametry opět nasetovat.

Fajn, to zní dobře, ale jak přesměrovat z komponenty na presenter ajaxově s i tou změnou URL?

m.brecher
Generous Backer | 717
+
0
-

@Kcko Pokud používáš pro ajax knihovnu Naja, tak by asi šlo modifikovat chování Naja, která právě zapisuje do historie prohlížeče to url (takové jaké udělá signál komponenty) tak, aby zapisovala to pěkné url. Komponenta by se nesetovala, ale kdyby uživatel refreshnul stránku, presenter by musel umět komponentu nasetovat i pod tímto pěkným url.

Mrkni do dokumentace Naja, nebo na video na youtube od Jirky Pudila.

m.brecher
Generous Backer | 717
+
0
-

@Kcko Naja má eventy pro manipulaci s history: https://naja.js.org/#…

Kcko
Člen | 465
+
0
-

m.brecher napsal(a):

@Kcko Pokud používáš pro ajax knihovnu Naja, tak by asi šlo modifikovat chování Naja, která právě zapisuje do historie prohlížeče to url (takové jaké udělá signál komponenty) tak, aby zapisovala to pěkné url. Komponenta by se nesetovala, ale kdyby uživatel refreshnul stránku, presenter by musel umět komponentu nasetovat i pod tímto pěkným url.

Mrkni do dokumentace Naja, nebo na video na youtube od Jirky Pudila.

Ahoj, díky za snahu.

Nakonec stačilo a to uz zařídí relativně pěknou URL (resp skoro stejnou, akorát bych ?do věcí …)

			// https://naja.js.org/#/history?id=history-mode
			$this->presenter->payload->postGet = TRUE;
			$this->presenter->payload->url = $this->link('this');