presmerovani ve startup(), predtim potreba GET

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

Zdravim, presmerovavam na mobilni verzi detekci mobilniho zarizeni – vse v metode startup()

potrebuji ale, kdyz clovek se z mobilni verze prepne na tu normalni, tak se mu nastavilo cookie, ze ma defaultne standardni verzi webu.

Normalne jsem to resil pomoci GET /?version=standard, nastavil cookie a pak podminil presmerovani if cookie is not "standard"

V nette toto delam poprve a mam problem, ze presmerovavam ve startup() a ziskavam get a nastavuji cookie v renderDefault(), ktere je az za startup(), tzn. se z mobilniho webu presmeruji na ten nemobilni, ale ten me zas hned hodi zpatky, protoze nemam cas tam nastavit cookie.

Zkracene – redirect se vykona ve startup() ale to je podmineno necim, co vykonava pozdeji v render() a tudiz se nikdy na mobilnim zarizeni nevykona

Jak toto vyresit? Diky

( a jeste jedna otazka: mam metody renderNazevsablony(), existuje take jen render() pro vsechny sablony globalne? )

22
Člen | 1478
+
0
-
  • proč cookie a ne session?
  • pokud se v mobilním zařízení přepne na klasické zobrazení, nastavím $session->mobile = FALSE;
  • pokud se přepne na zpět na mobilní verzi, session odstranim/nastavím TRUE
  • ve startupu kontruluji isMobile() && $session->mobile === TRUE || isset($session->mobile === TRUE), pak provedu redirect

Editoval 22 (8. 11. 2011 15:11)

simPod
Člen | 383
+
0
-

no, ona mobilni verze neni nette. tzn po kliku na odkaz musim nastavit session na webu na kterej prijde a toho bych docilil pomoci GET

22
Člen | 1478
+
0
-

to je na jiné doméně nebo proč GET? Já myslel, že to máš jako modul.

Filip Procházka
Moderator | 4668
+
0
-

Proč bys to měl nastavovat až v Render? Nastavení bych přesunul do signálu.

public function handleTurnOffMobileVersion()
{
	$this->getSession('device')->mobile = FALSE;
	$this->redirect('this');
}

public function handleTurnOnMobileVersion()
{
	$this->getSession('device')->mobile = TRUE;
	$this->redirect('this');
}

Detekci a kontrolu bych prováděl takto.

protected function startup()
{
	parent::startup();

	$device = $this->getSession('device');
	if (!isset($device->mobile)) {
		$resolver = new DeviceResolver();
		$result = $resolver->resolve($this->getHttpRequest());
		$device->mobile = $result->isMobile();
	}
}

public function isMobile()
{
	return $this->getSession('device')->mobile;
}

DeviceResolver by byla třída s jednou metodou, která vyhodnotí výchozí stav. A taky, na co nastavovat další sušenku, když už mám session?

Popř. by jsi to mohl ještě rozšířit o nějakou kontrolu preferencí, co si nastavil uživatel a předávat si to v identitě a kontrolovat přednostně z ní.

simPod
Člen | 383
+
0
-

no, to uz tedy chapu

a taky nastavit session misto cookie

ted me akorat napada, ze hlavni chyba co jsem udelal je, ze to mam mimo nette ve slozce www/mobile/ misto toho, abych vytvoril novy modul