Možnost u backlinku navolit vlastní klíč

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

Zdravím,

bylo by dobré mít možnost u backlinku zadat klíč ručně (strlen != 5 kvůli klasickým backlink klíčům), a tím pádem mít možnost backlinky „přepisovat“.

Například datagrid generujcí backlinky (po vyplnění formu se do datagridu vrátíme backlinkem) při akcích (další stránka/filtr..) generuje pořád nové a tím vzniká bordel. Ten by se dal částečně omezit tím, že by grid generoval backlink jen jeden s nadefinovaným klíčem a přepisoval ho.

Editoval Ascaria (15. 11. 2012 14:34)

David Ďurika
Člen | 328
+
0
-

presne toto som potreboval aj ja minule! len som nechcel hackvat, tak som to nakoniec neviriesil…

ic
Člen | 430
+
0
-

Nevím, jestli problém chápu… jde o to, že na stejnou stránku vede odkaz pokaždé s jiným ?backlink=něco parametrem a v tom spočívá onen bordel?

Ascaria
Člen | 187
+
0
-

Ano, backlink generuje unikátní klíč při každém storeRequest (i když je to na stejnou stránku) a nejde mu vnutit nějak klíč, kerý má použít. Pokud budu v datagridu stránkovat dopředu a dozadu 10×, tak mi vznikne právě tolik backlinků vedoucích jen na 2 stránky (trvání mají 1 den, protože editační formulář nemusí být vyplněn za 10 minut). Pokud mu klíč vnutím, bude mít datagrid vždy jeden klíč a ten bude přepisovat.

@achtan: Já to pořešil tak, že mám ve svém BasePresenteru overridnutý storeRequest, kterému už vnutit klíč jde.

	/**
	 * Stores current request to session.
	 * @param  mixed  optional expiration time
	 * @param  mixed  optional backlink key
	 * @return string key
	 */
	public function storeRequest($expiration = '+ 10 minutes', $key = null)
	{
		$session = $this->getSession('Nette.Application/requests');
if(null === $key) {
    do {
        $key = Nette\Utils\Strings::random(5);
    } while(isset($session[$key]));
} elseif(isset($session[$key])) {
    unset($session[$key]);
}
		$session[$key] = Array($this->getUser()->getId(), $this->request);
		$session->setExpiration($expiration, $key);
		return $key;
	}

Editoval Ascaria (19. 11. 2012 16:27)

ic
Člen | 430
+
0
-

Pokud nejde třeba o webovou analytiku, ale o to jaký pocit z toho bude mít uživatel, (případně jakou adresu si uloží do záložek / postne někam jinam na internet), mohl by tohle pěkně řešit javascript a novinka history.replaceState . Já už tohle k odebírání fid a backlink parametrů používám ( https://github.com/…layout.latte#L5 ). Muselo by se ale trochu upravit… aktuálně se sežere fid (tam je to super, protože po obnovení stránky už uživatel flash zprávičku vidět nemá) i backlink stejným způsobem (a u backlink to může být problém, protože F5-kou uživatel přijde o možnost vrátit se na předchozí stránku). Takže by to chtělo pro tento účel javascript poupravit, aby si backlink při refreshi stránky zapamatoval, teoreticky by se to asi nějak dalo, ale prakticky jsem to ještě nezkoušel.