Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

All other Modules /

Discuss all other Modules here.

Moderators: martimiz, Sean, biapar, Willr, Ingo, swaiba

mobile module: redirecting to a specific page


Go to End
Reply


1117 Views

Avatar
Anatol

126 Posts

1 July 2011 at 2:10pm

Edited: 01/07/2011 2:18pm

Hi,

I made a small change to the mobile module because I prefer that links to a specific page should be redirected to the same page under the mobile subdomain, so something like

http://mydomain.com/link/to/page/ should redirect to
http://m.mydomain.com/link/to/page/ (not to the default http://m.mydomain.com/)

Mainly because if I get a link by email or through another page I would end up on the home page, not on the actual page the link should go to.

It's an easy fix. In MobileSiteControllerExtension, method onBeforeInit add $this->owner->RelativeLink() to both redirect functions.

return $this->owner->redirect($config->FullSiteDomain . $this->owner->RelativeLink());

Or, if you also have modules installed that use the 'Action' and 'ID' URL parameters (such as the Image Gallery, e.g. http://mydomain.com/gallery/album/my-holiday ) you could add the code in green:

/**
	 * Override the default behavior to ensure that if this is a mobile device
	 * or if they are on the configured mobile domain then they receive the mobile site.
	 */
	public function onBeforeInit() {
		$config = SiteConfig::current_site_config();
		
		$URLParams = Director::URLParams();
		if ($this->owner->RelativeLink() != '/') $url_params = $this->owner->RelativeLink();
		if ($URLParams['Action']) $url_params .= $URLParams['Action'].'/';
		if ($URLParams['ID']) $url_params .= $URLParams['ID'];
		if ($URLParams['OtherID']) $url_params .= '/'.$URLParams['OtherID'];

		// Redirect users to the full site if requested (cookie expires in 30 minutes)
		if(isset($_GET['fullSite'])) {
			$_COOKIE['fullSite'] = 1;
			setcookie('fullSite', 1, time() + self::$cookie_expire_time);
		}

		// Redirect to the full site if user requested
		if($this->onMobileDomain() && !empty($_COOKIE['fullSite']) && $config->MobileSiteType == 'RedirectToDomain') {
			return $this->owner->redirect($config->FullSiteDomain . $url_params);
		} elseif(!empty($_COOKIE['fullSite'])) {
			return; // nothing more to be done
		}

		// If the user requested the mobile domain, set the right theme
		if($this->onMobileDomain()) {
			SSViewer::set_theme($config->MobileTheme);
		}

		// User just wants to see a theme, but no redirect occurs
		if(MobileBrowserDetector::is_mobile() && $config->MobileSiteType == 'MobileThemeOnly') {
			SSViewer::set_theme($config->MobileTheme);
		}

		// If on a mobile device, but not on the mobile domain and has been setup for redirection
		if(!$this->onMobileDomain() && MobileBrowserDetector::is_mobile() && $config->MobileSiteType == 'RedirectToDomain') {
			return $this->owner->redirect($config->MobileDomain . $url_params);
		}
	}

There may be a more 'pretty' solution, but for me this works.

Cheers!
Anatol