Change Master and Theme for Mobile depending on outcome of logic
Hi,
I am developing a project which includes my first venture in to Mobile web development. I am trying to change the Master page (template) and theme depending on the outcome of the boolean I have. I have trawled for answers but it seems that nothing really makes sense as its either too old to not relevant. Your help would be appreciated. We will be using Sitefinity 4.4.
Also... is there plans to make this kind of development a part of sitefinity in future versions?
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Web;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
Telerik.Cms;
public
partial
class
App_Master_wms_main : System.Web.UI.MasterPage
protected
void
Page_Load(
object
sender, EventArgs e)
if
(isMobileBrowser() ==
true
)
public
static
bool
isMobileBrowser()
//GETS THE CURRENT USER CONTEXT
HttpContext context = HttpContext.Current;
//FIRST TRY BUILT IN ASP.NT CHECK
if
(context.Request.Browser.IsMobileDevice)
return
true
;
//THEN TRY CHECKING FOR THE HTTP_X_WAP_PROFILE HEADER
if
(context.Request.ServerVariables[
"HTTP_X_WAP_PROFILE"
] !=
null
)
return
true
;
//THEN TRY CHECKING THAT HTTP_ACCEPT EXISTS AND CONTAINS WAP
if
(context.Request.ServerVariables[
"HTTP_ACCEPT"
] !=
null
&&
context.Request.ServerVariables[
"HTTP_ACCEPT"
].ToLower().Contains(
"wap"
))
return
true
;
//AND FINALLY CHECK THE HTTP_USER_AGENT
//HEADER VARIABLE FOR ANY ONE OF THE FOLLOWING
if
(context.Request.ServerVariables[
"HTTP_USER_AGENT"
] !=
null
)
//Create a list of all mobile types
string
[] mobiles =
new
string
[]
"midp"
,
"j2me"
,
"avant"
,
"docomo"
,
"novarra"
,
"palmos"
,
"palmsource"
,
"240x320"
,
"opwv"
,
"chtml"
,
"pda"
,
"windows ce"
,
"mmp/"
,
"blackberry"
,
"mib/"
,
"symbian"
,
"wireless"
,
"nokia"
,
"hand"
,
"mobi"
,
"phone"
,
"cdm"
,
"up.b"
,
"audio"
,
"SIE-"
,
"SEC-"
,
"samsung"
,
"HTC"
,
"mot-"
,
"mitsu"
,
"sagem"
,
"sony"
,
"alcatel"
,
"lg"
,
"eric"
,
"vx"
,
"NEC"
,
"philips"
,
"mmm"
,
"xx"
,
"panasonic"
,
"sharp"
,
"wap"
,
"sch"
,
"rover"
,
"pocket"
,
"benq"
,
"java"
,
"pt"
,
"pg"
,
"vox"
,
"amoi"
,
"bird"
,
"compal"
,
"kg"
,
"voda"
,
"sany"
,
"kdd"
,
"dbt"
,
"sendo"
,
"sgh"
,
"gradi"
,
"jb"
,
"dddi"
,
"moto"
,
"iphone"
;
//Loop through each item in the list created above
//and check if the header contains that text
foreach
(
string
s
in
mobiles)
if
(context.Request.ServerVariables[
"HTTP_USER_AGENT"
].
ToLower().Contains(s.ToLower()))
return
true
;
return
false
;
Hi Jason,
That's a tough one, unfortunately there is no straightforward way to change dynamically the template of a Sitefinity page. However, I believe you might achieve similar results using CSS 3 media queries, for example you might want to check this blog post out.
Another option, if you still prefer to keep the mobile version separated from the desktop browsers one, you can create different pages and use a simple user control on a page to detect whether the browser is mobile or not, and redirect to the desired version.
"Also... is there plans to make this kind of development a part of sitefinity in future versions?" - yes, we are currently working on extending the default functionality with mobile support, and the feature should be available in an upcoming release.
Please do not hesitate to get back to us if you need some additional information, or have some other questions.
All the best,
Boyan Barnev
the Telerik team