backlink a odskrolovanie na kotvu

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

Ahoj,

chcel by som docielit, aby po uspesnom prihlaseni uzivatela ho nielen presmerovalo na stranku, z kt. prisiel pomocou restoreRequest(), ale aj odskrolovalo na nejaku kotvu (#). Ale netusim, ako na to :)

kravčo
Člen | 721
+
0
-

Metódy Application::(re)storeRequest() pracujú s PresenterRequestom, ktorý o kotve netuší. Riešením by mohlo byť prepísanie metódy restoreRequest() tak, aby získala url

IRouter::constructUrl(PresenterRequest, IHttpRequest)

pripojila k nej kotvu a potom zavolala

Presenter::redirectUri(url);
// alebo
HttpResponse::redirect(url);
exit;
Ondřej Mirtes
Člen | 1536
+
0
-

Musíš předem vědět, na jakou kotvu (tzn. musí to být na každé stránce na stejnou nebo to nějak dělat javascriptem), protože na server se část za # vůbec neodesílá, tudíž PHP o tom vůbec neví.

Pokud to nemusí být variabilní a formulář bys odesílal na stejné místo, tak po ukotvení ($form = new AppForm($this, $name)) zavolej v továrničce $form->setAction .= '#kotva';

kravčo
Člen | 721
+
0
-

LastHunter napsal(a):

Musíš předem vědět, na jakou kotvu (tzn. musí to být na každé stránce na stejnou nebo to nějak dělat javascriptem), protože na server se část za # vůbec neodesílá, tudíž PHP o tom vůbec neví.

PHP o kotve vedieť nemusí, musí ju len poslať… Napr.

Environment::getHttpResponse()->redirect('http://localhost/path#anchor');
exit;

Pokud to nemusí být variabilní a formulář bys odesílal na stejné místo, tak po ukotvení ($form = new AppForm($this, $name)) zavolej v továrničce $form->setAction .= '#kotva';

Určite nie do action, pretože takto sa kotva pri presmerovaní po spracovaní formulára stratí! Kotva patrí do URL, na ktorú sa presmeruje po spracovaní formulára!

Ondřej Mirtes
Člen | 1536
+
0
-

Ano, musí jí poslat, to je mi jasné, ale neví jakou má poslat kotvu, pokud to má být variabilní a ne kotva vždy stejná…

setAction – jo, sorry, spletl jsem si to s jinou situací.

redhead
Člen | 1313
+
0
-
Environment::getHttpResponse()->redirect('http://localhost/path#anchor');
exit;

Co to? Proč to? Jak to?

Nemá/nemůže to být jen takto:

$this->redirect('Presenter:action#anchor');
//exit už snad taky není potřeba ne?

?

Ondřej Mirtes
Člen | 1536
+
0
-

redhead napsal(a):

Environment::getHttpResponse()->redirect('http://localhost/path#anchor');
exit;

Co to? Proč to? Jak to?

Nemá/nemůže to být jen takto:

$this->redirect('Presenter:action#anchor');
//exit už snad taky není potřeba ne?

?

Obávám se, že ne, mícháš tam link v Nette tvaru a podobu výsledné URI… Takže spíš takto:

$this->redirectUri($this->link('//Presenter:action') . '#anchor');
redhead
Člen | 1313
+
0
-

Aha, škoda.

Já už doufal:

https://api.nette.org/…ter.php.html#814

ale createRequest se nevolá při redirectu..

redhead
Člen | 1313
+
0
-

Nebo jsem se mýlil??

https://api.nette.org/…ent.php.html#331

Editoval redhead (19. 10. 2009 19:53)

kravčo
Člen | 721
+
0
-

redhead napsal(a):

Nemá/nemůže to být jen takto:

$this->redirect('Presenter:action#anchor');
//exit už snad taky není potřeba ne?

?

Nevedel som, že odkazy na Presenter:action podporujú aj kotvy, takže stačí… A správne, exit v tomto prípade nie je potrebný, v tom mojom však áno…

ale createRequest se nevolá při redirectu..

Ale volá :)

redhead
Člen | 1313
+
0
-

Já si právě myslel, že jsem to už někde viděl, tuším od Davida.

kravčo napsal(a):
Ale volá :)

j, právě že jsem na to narazil v mém posledním příspěvku :D

Matúš Matula
Člen | 257
+
0
-

Vdaka za vase nazory a rady. Nakoniec som to spravil podla kravcovej prvej rady.

Dikes