Routování se znakem #

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

Snažím se routovat podle části URL, která se nachází za znakem # (volitelná část URL).

Příklad: http://example.com/#?presenter=Default&action=default nebo jednodušeji např. http://example.com/#Default;default

Proč: chci pro navigaci na webu použít AJAX (Stránka by se měla obnovit ideálně pouze v jedné situaci – to když by se na server nahrával soubor – to nelze realizovat AJAXem). Chci mít ale možnost „bookmarkování“ jednotlivých stavů stránky, zachování funkčnosti tlačítka „zpět“ a „vpřed“ apod.
Problém je, že jakákoliv změna URL pomocí JS vyvolá znovunačtení stránky. Jedinou výjimkou je právě změna části URL za znakem # (javascript: location.hash='to co bude za #';).

Ukázka, jak je to možné řešit např. v Google Web Toolkitu (popis: tady).

Je možné konfigurovat „standardní“ router tak, aby bral v úvahu tuto část url?

Zkoušel jsem různé kombinace typu:

<?php
$router[] = new Route('#<presenter>;<action>', array(
        'presenter' => 'Default',
        'action'      => 'default',
));
?>

ale bez úspěchu (myslím, že část URL s # se před zpracováním „uřízne“?)…

Můžete mě nasměrovat nějakým směrem vedoucím k řešení (doufám, že jenom špatně píšu to pravidlo)? :-)

David Grudl
Nette Core | 8218
+
0
-

Fragment (část za #) uřízne už samotný prohlížeč a na webový server vůbec nedorazí. Routovat podle něj proto nelze.

mat
Člen | 4
+
0
-

Díky za odpověď…

Takže jedinou možností bude routování až u klienta… Javascript naparsuje část URL za # a pošle na server odpovídající požadavek…

David Grudl
Nette Core | 8218
+
0
-

přesně tak