WSS3SDK之:如何通过重定向来定制Mobile主页
默认情况下,WSS在网站中使用一种上下交错的重定向机制。Mobile主页是在传统的URL后面多了
一个"m"文件夹(比如,http(S)://Server/sites/Site/m/
)用来重定向请求至mobile的default.aspx页。然后该default.aspx页会将用户重定向到实际的主页。根据目前站点定义的类型,
会依次进行下列处理:
- default.aspx中仅放置了一个控件,他告诉运行时寻找名为"MobileHomePageRedirect"的RenderingTemplate。
- 运 行时会搜索所有位于Local_Drive:\Programe Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\CONTROLTEMPLATES下的*.ascx文件,通过RenderingTemplate找到该 名称。最终会在MobileDefaultTemplates.ascx文件中找到一个。
- MobileHomePageRedirect控件的Template属性将运行时指向一个SPMobileWebUrlRedirect类的对象。
- SPMobileWebUrlRedirect 对象用Mobile_SiteTypeID_HomePage_Redirect的方式构建了另一个RenderingTemplate的名称,其中 SiteTypeID是WSS站点定义的名称,比如STS,或一个自定义站点定义的ID号,比如10001。(要查找有关mobile网站重定向的更多信 息,可以参考SPMobileWebUrlRedirect中的备注节)
- 通过第二个RederingTemplate,运行时再次搜索 ...\12\TEMPLATE\CONTROLTEMPLATES下的所有*.ascs文件。
- 如 果SiteTypeID为BLOG,运行时将从MobileDefaultTemplate.ascx中找到 Mobile_BLOG_HomePage_Redirect RenderingTemplate。该控件的Template属性将运行时指向一个SPMobileUrlRedirection类的对象,该对象的 PageFileName属性指定了bloghome.aspx为最终的主页。
- 如 果SiteTypeID不是BLOG,且没有创建自定义的.ascx文件,运行时将使用MobileDefaultTemplate.ascx中的 Mobile_Default_HomePage_Redirect RenderingTemplate。该控件的Template属性将运行时指向一个SPMobileUrlRedirect类的对象,其 PageFileName属性指定mbllists.aspx为最终的主页。
您可以创建一个自定义控件来将用户重定向到您预先设计好的mobile主页。
步骤:
- 创建一个自定义的mobile主页;比如,MyHome.aspx。
- 将新主页放置在下列目录中:
Local_Drive:\Programe Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\LAYOUTS\MOBILE - 创建一个自定义控件模板文件。比如,MyMobileControlTemplate.ascx(内容参考下面的例子)
- 将新控件模板放置在下面的目录:
Local_Drive:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\CONTROLTEMPLATES - 重启IIS,然后浏览网站看看定制的效果。
注意:
如果您是在电脑上用mobile设备模拟器,而不是实际的mobile设备,您可能还需要在每次修改好后删除internet临时文件来保证看到的是页面的新版本。
例子
下面的例子展示了一个自定义.ascx文件的内容(比如,MyMobileControlTemplate.ascx)其中定义了一个控件模板。当 mobile设备访问一个使用"MySiteType"站点定义的网站时,运行时将被导向到主页MyHome.aspx。注意该定制文件的下面几点内容:
- 所有带“%@”标记的语句都是公式化的套话,在所有的定制页面中都是如此。
- “MySiteType”可以是:
- 工作组站点定义的名称:“STS”。MPS,CENTRALADMIN,和WIKI站点定义不支持通过mobile设备来访问。BLOG站点定义可以通过mobile设备来访问,但是已经有一个名为Mobile_BLOG_HomePage_Redirect 的RenderingTemplate,定义在MobileDefaultTemplates.ascx文件中。您不可以修改该文件。您可以在自定义的.ascx文件中创建第二个RenderingTemplate也命名为Mobile_BLOG_HomePage_Redirect,但是这样会有破坏现有其他基于已有Mobile_BLOG_HomePage_Redirect 的定制或第三方解决方案的风险。
注意:
WSS内置的RenderingTemplate会先加载,所以当相同名称的自定义模板加载时会覆盖标准的渲染模板。如果两个或更多的自定义 RenderingTemplate具有相同的名称,则按文件名的字母顺序排在最后的将会覆盖其他的。给定文件中包含两个或更多的同名模板的,这些模板都 不会被加载。
注意:
网站定义的名称是在WebTemp.xml文件的Template元素的Name属性中设定的。
- 任何已创建的自定义网站定义的ID号(不是Name)
注意:
网站定义的ID号是在WebTemp.xm文件的Template元素的ID属性中设定的。
重要提醒:
在站点定义文件Onet.xml中站点定义配置的Configuration元素必须具有一个WebFeature元素,并且该元素必须包含到以下这个Feature元素的重定向:
<Feature ID="F41CC668-37E5-4743-B4A8-74D1DB3FD8A4" />(注:这是继承自STS网站定义的标志)。
C#
<%@ Control Language="C#" %>
<%@ Assembly Name="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="mobile" Namespace="System.Web.UI.MobileControls" Assembly="System.Web.Mobile, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" %>
<%@ Register TagPrefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="SPMobile" Namespace="Microsoft.SharePoint.MobileControls" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<SharePoint:RenderingTemplate RunAt="Server" ID="Mobile_MySiteType_HomePage_Redirect">
<Template>
<SPMobile:SPMobileUrlRedirection RunAt="Server" PageFileName="MyHome.aspx" />
</Template>
</SharePoint:RenderingTemplate>
<%@ Assembly Name="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="mobile" Namespace="System.Web.UI.MobileControls" Assembly="System.Web.Mobile, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" %>
<%@ Register TagPrefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="SPMobile" Namespace="Microsoft.SharePoint.MobileControls" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<SharePoint:RenderingTemplate RunAt="Server" ID="Mobile_MySiteType_HomePage_Redirect">
<Template>
<SPMobile:SPMobileUrlRedirection RunAt="Server" PageFileName="MyHome.aspx" />
</Template>
</SharePoint:RenderingTemplate>