presmerovani ve startup(), predtim potreba GET
- simPod
- Člen | 383
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
- 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)
- Filip Procházka
- Moderator | 4668
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í.