Lze se zbavit _fid parametru?

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

Zdravím,

na webu zjišťuji, odkud návštěvníci přišli přes parametr utm_source.

public function beforeRender()
{
	parent::beforeRender();

	$parameters = $this->request->getParameters();
	if (isSet($parameters['utm_source'])) {
		/** @todo Uložit do databáze */
		$this->flashMessage($parameters['utm_source']);
		$this->redirect('this');
	}
}

Jenže po redirectu nedostanu „čistou“ URL, ale je tam právě ten _fid parametr. Jde se ho nějak zbavit?

Editoval Grelek (16. 1. 2013 19:40)

Michalek
Člen | 212
+
0
-

_fid je tam kvůli té flashMessage, až doděláš TODO a nebudeš žádnou flashMessage vypisovat, bude to čistá url.

Grelek
Člen | 233
+
0
-

Ach. Jsem ňouma. Díky… =D

Filip Procházka
Moderator | 4668
+
0
-

_fid je tam kvůli tomu, aby Nette poznalo, ve kterém okně má zprávu zobrazit.

Koukni na tohle video: http://www.youtube.com/watch?…

Jediným řešením je použít history api prohlížeče a pomocí javascriptu v té url ten parametr skrýt.

Šaman
Člen | 2668
+
0
-

Jak píše Filip. Používám tohle v hlavním JS souboru.

<script>
/* Remove _fid from url */
$(function(){
	if(window.history.replaceState) {
		l = window.location.toString();
		uri = l.indexOf('_fid=');
		if(uri != -1) {
			uri = l.substr(0, uri)+l.substr(uri+10);
			if( (uri.substr(uri.length-1) == '?') || (uri.substr(uri.length-1) == '&') ) {
				uri = uri.substr(0, uri.length-1);
			}
			window.history.replaceState('', document.title, uri);
		}
	}
});
</script>

Nevypne to úplně _fid, ale po načtení stránky to odstraní _fid z adresy. Jediné co, že při rychlém refreshi to napodruhé už flashmessage nezobrazí, zatímco pokud _fid neodstraníš, tak se ti ta flashmessage bude zobrazovat asi 3 vteřiny i po refreshi. Zjistil jsem, že mi to nijak nevadí.

Editoval Šaman (17. 1. 2013 14:01)

Grelek
Člen | 233
+
0
-

Díky. Koukal jsem na roadmap 2.1 a pokud jsem to dobře pochopil, měl by se odstranit, ale stejně jen v některých případech.

Script si určitě schovám, na video jsem koukal. Díky moc. =) Mně to spíš zajímalo, jestli se toho dá zbavit, teď už ale vím, proč tam je.

enumag
Člen | 2118
+
0
-

Ono to budoucí odstranění stejně asi principiálně nebude jiné než co teď poslal @Šaman.

ic
Člen | 430
+
0
-

Šaman napsal(a):

Jak píše Filip. Používám tohle v hlavním JS souboru.

Není škoda, to nechat v jQuery čekat až na načtení celé stránky? Tohle může být první věc v HTML hlavičce a funguje to, URI je pro stránku přístupná hned.

To s těma 3s je nějaká novinka, nebo jsem si toho nikdy nevšiml? Ten script by na to mohl asi taky nějak reagovat.

enumag
Člen | 2118
+
0
-

Ty 3 vteřiny není žádná novinka. Myslím, že reagovat na to je zbytečné, připadá mi naopak lepší když se flashMsg zobrazí jen jednou.

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Dovolil jsme si převzít původní kód Ondry Mirtese a zařadit tuto funkcionalitu jako volitelné rozšíření do nette.ajax.js, zatím jen v masteru. Můžete vyzkoušet, jestli je to ok. Zachovává to podporu pro 3s pro refresh, protože podle mě tahle Nette feature má své opodstatnění (tu a tam prostě omylem zmáčknu F5, a připravím se tak o zprávičku). _fid tedy zmizí až po 3 vteřinách.

https://github.com/…move.ajax.js

Editoval vojtech.dobes (9. 2. 2013 6:37)

iguana007
Člen | 970
+
0
-

Taky mě tam před časem ten parametr vadil a to především kvůli Google Analytics – měl jsem tak ve statistikách jednu URL ale s tisícovkou různých _fid – vyřešil jsem to jednoduše přímo v Google Analytics, kde lze v nastavení profilu vypsat parametry URL, které mají analytics ignorovat a pak už to tam nepadá (je to v nastavení profilu – políčko: Exclude URL Query Parameters).