`

MOSS点滴(3):说说MOSS中的母版页

阅读更多

MOSS中有两种页面:Site Pages 和Application Pages,他们分别使用不同的母版页,Site Pages 使用的是
Default.master, Application Pages使用的是Application.master。我们下面讨论的主要是针对
default.master的,因为Application.master是不支持被定制的。

Default.master在安装目录的C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\GLOBAL\目录下,站点中引用的相对路径为/_catalogs/masterpage/default.master。MOSS中
母版页是可以嵌套的:<%@ Master master=MyParent.master %>。不能添加webpart区域,但可以添加静
态的wetpart 。
 

该母版页中主要有以下几部分:
1. 链接,菜单,图标和导航控件。
MOSS已经给我们提供了很多封装好的控件,比如SPWebPartManager,导航的控件等等。
2. 占位符(Named Placeholds)
我们可以利用占位符来给继承自Default.master的页面添加内容,下面会有例子。
3. Delegate controls
这个词就不翻译了,使用它可以替换掉母版页中的内容。
 
下面是Default.master中的一段代码:
%@Master language="C#"%
<%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls"
Assembly="Microsoft.SharePoint, …" %>
<HTML runat="server">
 
<HEAD runat="server">
  <!-- SharePoint 控件-->
  <SharePoint:CssLink ID="CssLink1" runat="server"/>
 
<SharePoint:Theme ID="Theme1" runat="server"/> 
  <SharePoint:ScriptLink language="javascript" name="core.js" Defer="true" runat="server"/>
 
<!-- Named Placeholders -->  
  <Title ID=onetidTitle> 
  <asp:ContentPlaceHolder id=PlaceHolderPageTitle runat="server"/> 
  </Title>  
<asp:ContentPlaceHolder id="PlaceHolderAdditionalPageHead"  runat="server"/> 
<!-- Named Delegate Control -->  
<SharePoint:DelegateControl ID="DelegateControl1" runat="server" ControlId="AdditionalPageHead"
  AllowMultipleControls="true"/>
</HEAD>


Head中的CssLink 和Theme,ScriptLink都是moss中标准的服务器控件,这两个控件在application.master中也是有的.
Head中有两个Named Placeholders,ID 分别为PlaceHolderPageTitle 和 PlaceHolderAdditionalPageHead,
PlaceHolderPageTitle表示页面的标题,PlaceHolderAdditionalPageHead表示页面的Head区域,你可以添加类似
<meta>的标签,示例如下:
<%@ Page MasterPageFile="~masterurl/default.master" %>
<asp:Content ID="PageTitle" runat="server" ContentPlaceHolderID="PlaceHolderPageTitle">
  My Custom Page Title
</asp:Content>
<asp:Content ID="AdditionalPageHead" runat="server" ContentPlaceHolderID="PlaceHolderAdditionalPageHead">
  <META name="keywords" content="Software, Consulting, Money, Fame" />
</asp:Content>


下面是MOSS中已定义的Named placeholds

占位符的Name

描述

PlaceHolderAdditionalPageHead 需要写在页面<head>标签里的附加内容,如引用的脚本或样式文件
PlaceHolderBodyAreaClass 附加在页面顶部的body中的样式
PlaceHolderBodyLeftBorder 页面body的边框元素
PlaceHolderBodyRightMargin 页面body的右边距
PlaceHolderCalendarNavigator 在页面中有日历时为其显示一个日期选择框
PlaceHolderFormDigest 这是页面中必备的 "form digest"安全组件
PlaceHolderGlobalNavigation 站点导航
PlaceHolderHorizontalNav 导航标签
PlaceHolderLeftActions 左侧导航区下面的动作区
PlaceHolderLeftNavBar 左侧导航区
PlaceHolderLeftNavBarBorder 左侧导航区的边框元素
PlaceHolderLeftNavBarDataSource 左侧导航区菜单的数据源
PlaceHolderLeftNavBarTop 左侧导航区上面的导航区
PlaceHolderMain 页面主体
PlaceHolderMiniConsole 一个放置页面级命令的地方,比如在WIKI站点里的Edit Page, History, Incoming Links
PlaceHolderNavSpacer 左侧导航区的宽度
PlaceHolderPageDescription 页面描述区
PlaceHolderPageImage 页面左上的图标
PlaceHolderPageTitle 页面的<Title>,通常显示在浏览器的标题栏
PlaceHolderSearchArea 搜索框
PlaceHolderSiteName 站点名称
PlaceHolderTitleAreaClass TitleArea附加的样式
PlaceHolderTitleAreaSeparator TitleAreaSeparator区
PlaceHolderTitleBreadcrumb TitleBreadcrumb区
PlaceHolderTitleInTitleArea Breadcrumb区下面的标题
PlaceHolderTitleLeftBorder Title区左侧边框
PlaceHolderTitleRightMargin Title区右侧空白
PlaceHolderTopNavBar 标签导航区
PlaceHolderUtilityContent 页面底部需要的一块特殊内容
SPNavigation 在 Windows SharePoint Services中默认为空,用于附加的页面编辑控件
WSSDesignConsole 页面编辑控件,当页面进入编辑页面模式时使用(当我们点 Site Actions, Edit Page后)


导航组件:
MOSS提供了很多标准的导航组件,如NavigationProvider, SPSiteMapProvider, SPContentMapProvider, 和SPXmlContentMapProvider,所有被激活的你都可以在站点的web.config的siteMap节点中配置,示例如下:

<siteMap defaultProvider="CurrentNavSiteMapProvider" enabled="true">
<providers>
<add name="SPNavigationProvider" type="Microsoft.SharePoint.Navigation.SPNavigationProvider,
Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" /> </providers> </siteMap>
 

顶部链接栏和快速启动菜单是Default.master 中定义的两个主导航组件。顶部链接栏是即AspMenu。它由数据
源为SiteMapDataSource 控件的 SPNavigationProvider的定义的。快速启动和顶部链接栏是以同样的方式定义
的,他们之间的区别是顶部链接的SiteMapDataSource中的StartingNodeUrl属性使用值为 sid:1002,而快速启
动菜单对应的StartingNodeUrl 属性值为 sid:1025。1002和1025是用于跟踪导航节点的,顶部链接的顶部节点的
id是1002,快速启动的顶部节点的id为1025。

顶部链接和快速启动的节点的添加也是非常方便的,在后台的"网站设置"即可以灵活的设置.也可以使用MOSS对
象模型来填加,示例代码如下:

SPWeb site = (SPWeb)properties.Feature.Parent;
SPNavigationNodeCollection topNav = site.Navigation.TopNavigationBar;
// 创建下拉菜单SPNavigationNode DropDownMenu1;
DropDownMenu1 = new SPNavigationNode("SitePages", "", false);
topNav[0].Children.AddAsLast(DropDownMenu1);
// 添加节点
DropDownMenu1.Children.AddAsLast(new SPNavigationNode("Page1","SitePages/Page1.aspx"));
DropDownMenu1.Children.AddAsLast(new SPNavigationNode("Page2","SitePages/Page2.aspx"));
 

Delegate Controls

我们可以设置它影响的范围,有四个级分别是:site scope, site collection scope, Web application scope, 和
farm scope。下面我们就以MOSS中的搜索栏为例说明,下面是MOSS中默认的:

<SharePoint:DelegateControl
  ID="DelegateControl5"
  runat="server"
  ControlId="SmallSearchInputBox"
/>

MOSS中使用名为ContentLightup的feature来实现这功能的,SearchArea.xml中对应的代码为:

<Control
  Id="SmallSearchInputBox"
  Sequence="100"
  ControlSrc="~/_controltemplates/searcharea.ascx"
/>

下面我们就用我们自己定制的搜索栏来替默认的,我们就需要在我们自定义的feature中做如下设置:

<Control
  Id="SmallSearchInputBox"
  Sequence="10"
  ControlSrc="~/_controltemplates/OurSearchArea.ascx"
/>
在这里要注意一点,Sequence属性的值一定要小于默认提供的,这个Sequence的值在wss中是100,在moss
标准版中是50,企业版是25。这个你可以去MOSS的安装目录下搜索feature中对应的xml文件来核对(名字:
SearchArea.xml)。由于我们定义的这个是站点的级别的,那么你整个站点页面中的搜索控件都会被替换为
你自己定制的样式。
下面就是我们自定义的搜索样式的页面.ascx代码:
<%@ Control Language="C#" %> 
<script runat="server">
protected void OurSearchArea_Click(object sender, EventArgs e)
{    }
</script> 
<table> 
 <tr><td><asp:Button ID="cmdRunSearch" runat="server" Text="Search" OnClick="OurSearchArea_Click" /></td>
 <td><asp:TextBox ID="txtSearchText" runat="server" Width="120" /></td></tr>
</table>

下图是替换的效果:
05 
 
上面我们使用了用户控件方式(.ascx),我们还可以使用控件类的方式来自定义,下面是MOSS提供的标准的
QuickLaunchDataSource.
 
<SharePoint:DelegateControl
     ID="DelegateControl8" runat="server"
     ControlId="QuickLaunchDataSource">
  <Template_Controls>
    <asp:SiteMapDataSource
      SiteMapProvider="SPNavigationProvider"
      ShowStartingNode="False"
      id="QuickLaunchSiteMap"
      StartingNodeUrl="sid:1025"
      runat="server" />
  </Template_Controls>
</SharePoint:DelegateControl>

这个DelegateControl 使用QuickLaunchDataSource控件来填充他的内容,并不是asc.aspx用户控件的
方式。他默认使用了id为QuickLaunchSiteMap的SiteMapDataSource控件,如果你想替换这个控件,你
可以在feature中添加一下代码
 
<Control Id="QuickLaunchDataSource" Sequence="1" ControlAssembly="System.Web, ..." 
ControlClass="System.Web.UI.WebControls.SiteMapDataSource"> 
 <Property Name="ID">QuickLaunchSiteMap</Property> 
 <Property Name="SiteMapProvider">SPSiteMapProvider</Property> 
 <Property Name="ShowStartingNode">False</Property>
</Control>
这个Control的id要和你要替换的id是一样的才可以。
 
自定义Default.master

我们可以使用SPD来定制母版页,母版页和其他的Site Page的原理是一样的,你定制过后就会被存到内容数
据库中。所以我们不要去文件目录下直接修改default.master文件,修改了也是没有用的。

下面我们就自定义一个母版页实现简单的换肤功能,在elements.xml中定义如下:

<Module Name="MasterPages" List="116" Url="_catalogs/masterpage">
<File Url="OurCustom.master" Type="GhostableInLibrary" />
</Module>

Url:"_catalogs/masterpage"是母版页的相对路径。

Type:"GhostableInLibrary" 会在文档库中存储该母版页。

List:属性代表不同的列表类型,下表是MOSS中已经定义的,微软建议我们自定义的最好大于10000,以避免
和已定义的冲突。

ID Description
100 Generic list
101 Document library
102 Survey
103 Links list
104 Announcements list
105 Contacts list
106 Events list
107 Tasks list
108 Discussion board
109 Picture library
110 Data sources
111 Site template gallery
112 UserInformation
113 Web Part gallery
114 List template gallery
115 XML Form library
116 MasterPageCatalog
117 NoCodeWorkflows
118 WorkflowProcess
119 WebPageLibrary
120 Custom grid for a list
130 DataConnectionLibrary
140 WorkflowHistory
150 GanttTasks
200 Meeting Series list
201 Meeting Agenda list
202 Meeting Attendees list
204 Meeting Decisions list
207 Meeting Objectives list
210 Meeting text box
211 Meeting Things To Bring list
212 Meeting Workspace Pages list
300 Portal Sites list.
301 Posts
302 Comments
303 Categories
1100 Issue tracking
1200 AdminTasks
2002 Personal document library
2003 Private document library

Page的MasterPageFile属性指定使用的母版页,MOSS中的母版页默认提供了一些token,主要有动态tokens ("~masterurl/default.master""~masterurl/custom.master") 和静态 tokens ("~site/default
.master"
and "~sitecollection/default.master"),说明如下:

Dynamic token "~masterurl/default.master"

可以通过SPWeb的MasterUrl属性来指定网站的母版页的URL,即指定page中的MasterPageFile,页面的<%@
Page MasterPageFile="~masterurl\default.master"%>
中的"~masterurl/default.master"在运
行时将会被
SPWeb的MasterUrl属性取代

Dynamic token "~masterurl/custom.master"

与上面的类似,他是通过SPWeb的CustomMasterUrl属性来指定的。

Static tokens "~site/default.master""~sitecollection/default.master"

如果你的内容页在http://siteColl/subsite1/subsite2/default.aspx,你使用了静态tokens"~sitecollection/mypage.master", 你内容页使用的母版页在这个位置 http://siteColl/
mypage.master
. 如果你用的tokens 是"~site/mypage.master", 你的母版页就在这个位置 http://siteColl/subsite1/subsite2/mypage.master.

注意:MasterUrl 和 CustomMasterUrl 默认都是这个值"/_catalogs/masterpage/default.master" ,如果你要
改变的话,要两个都改变,必须一致才行。

下面我们就来实现动态设定母版页,由于我们定义的是站点级的,而站点中的每个子站点都是应用的自己独立
的一个master,所以我们使用递归来替换所有的站点的母版页代码如下:

protected void btnApplyOurCustomMaster_Click(object sender, EventArgs e) 
{
  SPWeb site = SPContext.Current.Site.RootWeb
  string MasterUrlPath = site.ServerRelativeUrl;
  if (!MasterUrlPath.EndsWith(@"/"))
    MasterUrlPath += @"/";
  MasterUrlPath += @"_catalogs/masterpage/OurCustom.master";
  ApplyCustomBrand(MasterUrlPath, site);
}

protected void ApplyOurCustomMaster(string MasterUrlPath, SPWeb site) {
  site.MasterUrl = MasterUrlPath;
  site.Update();
  foreach (SPWeb child in site.Webs) {
    ApplyCustomBrand(MasterUrlPath, child);
  }
}
下图是前后的效果:
06 
 
分享到:
评论

相关推荐

    moss 母版页制作

    在SharePoint 2007(MOSS)中,母版页(Master Page)是整个网站界面的基础,它定义了页面的全局布局和样式,为内容页提供统一的外观和感觉。母版页的制作是一个结合了开发与设计的综合性工作,需要对HTML、CSS、ASP...

    MOSS母版页定制与讲解 MOSS学习基础

    2. **MOSS中的母版页和内容页** - 在MOSS中,创建母版页的过程与ASP.NET类似,但增加了对SharePoint特定功能的支持。例如,你可以使用`&lt;%@ Register&gt;`指令引入SharePoint的WebPartPages和SharePoint命名空间,以便...

    [MOSS开发]母版页的应用

    【知识点详解:MOSS开发中母版页的应用】 在探讨MOSS(Microsoft Office SharePoint Server)2007中母版页及其设计制作之前,我们首先需要理解母版页(Master Page)在Web开发中的核心作用。母版页是ASP.NET框架下...

    Moss2007中的列表迁移到Moss 2010的方法

    Moss 2007 中的列表迁移到 Moss 2010 的方法 Moss 2007 是 Microsoft Office SharePoint Server 2007 的一部分,提供了强大的协作和内容管理功能。然而,随着技术的发展和业务的增长,许多组织开始迁移到 Moss 2010...

    moss.py:Moss的Python客户端

    它是为编写的,用于处理Python作业提交中的相似性。 它是使用及其方言。安装pip install mosspy用法 import mosspyuserid = 987654321m = mosspy . Moss ( userid , "python" )m . addBaseFile &#40; "submission/...

    moss:Moss解释器(实验实现)

    ||苔藓翻译Moss是一种动态编程语言。它的解释器内核是用Rust编写的。从Rust调用Moss代码的示例: use moss :: object :: Object;fn main () { let i = moss :: Interpreter :: new (); i.rte. set ( "a" ,Object :: ...

    MOSS2007之开发概述

    1. **使用SharePoint XSDs**:MOSS2007 SDK提供了预定义的XSD(XML Schema Definitions),以供开发者验证SharePoint XML文件,确保其正确性。 2. **调试**:在调试过程中,可以附加到w3wp.exe进程来调试Web应用...

    MOSS 2007 Search Planning Best Practices

    3. **MOSS Search容量规划建议:** - 索引服务器所需存储:根据预期的索引大小计算所需的存储空间。 - 查询服务器所需存储:考虑查询结果缓存等因素,估算查询服务器的存储需求。 此外,文档还提供了有关硬件配置...

    MOSS QueryTool

    它为用户提供了强大的功能,以便更有效地探索和操作MOSS中的数据。CamlViewer2007是该工具的一个组件,用于查看和编辑CAML(Collaborative Application Markup Language)查询,这是在SharePoint中进行复杂数据检索...

    moss中使用第三方邮箱解决方案

    标题中的“moss中使用第三方邮箱解决方案”指的是在Microsoft Office SharePoint Server (MOSS)中集成非微软提供的电子邮件系统,例如Google Workspace、Zimbra、Exchange Online等。MOSS作为一个企业级的内容管理和...

    Matlab代码verilog-moss-cl:MOSS对CourseLib的支持

    这是一个如何向提交中添加MOSS分析的示例: $submission = $assignment-&gt;submissions-&gt;add_program("project2program", "Project 2 Program"); $moss = $submission-&gt;add_analysis(new \CL\MOSS\MossAnalysis()); ...

    MOSS学习日志

    4. MOSS是什么:MOSS 2007基于.NET Framework 3.0,其中包含的Windows Workflow Foundation(WWF)支持工作流的设计和实施。配置完成后,用户可以通过“SharePoint管理中心”创建并管理SharePoint站点。 5. 端口的...

    Moss2007开发入门教程

    1. **了解Webpart**:Webpart是MOSS中的可重用组件,可以显示数据、提供交互功能。 2. **创建Webpart**:使用Visual Studio创建新的SharePoint Webpart项目。 3. **设计界面**:利用ASP.NET控件构建Webpart界面。 4....

    moss2010安装部署

    Step 3: 安装 SQL Server 组件 MOSS 2010 需要 SQL Server 来存储数据,因此需要安装 SQL Server 组件,包括: * SP1 * CU1 Step 4: 安装 SharePoint 2010 必备软件 在安装 MOSS 2010 之前,需要安装必备软件,...

    moss-viz:在节点链接图中可视化Moss(软件相似性度量)

    在节点链接图中可视化 如何使用 只需打开index.html即可看到可视化效果。 它将打开一个示例数据文件Moss Results.html ,可以直接从网站保存该文件。 可视化 此标准节点链接图是使用实现的。 每个节点都是一个带有其...

    MOSS中实现自动上传图片

    下面我们将深入探讨如何在MOSS中实现图片的自动上传,以及这一过程涉及的关键知识点。 1. **Web服务接口**: MOSS 提供了一系列 Web 服务接口,如 SharePoint Web Services,使得开发者可以通过编程方式与 MOSS ...

    moss-locale:moss 框架的翻译模块

    苔藓地区 处理翻译、格式和内容的基本工具。 语言环境 处理语言环境名称、时区和货币子单位的类。 $ locale = new Locale ( 'en_GB' , 'UTC' , 100 ); echo $ locale -&gt; locale (); // will print "en_GB" ...

    MOSS 2007 LAB

    - **工作流**:MOSS 2007 支持多种工作流类型,可以帮助自动化业务流程,提高效率。 - **Excel Services**:允许用户在 Web 上查看和交互 Excel 工作表,无需安装 Excel 客户端。 - **Form Services**:用于创建和...

    MOSS开发常用集锦

    2. **Web部件开发**:MOSS支持自定义Web部件的创建,这使得我们可以根据业务需求构建功能丰富的用户界面元素。学习如何使用Visual Studio创建、调试和部署Web部件是开发中的关键技能。 3. **事件处理程序**:在...

    Matlab代码verilog-moss_ruby:Rubygem将文件提交到MOSS

    Matlab代码verilog 描述 Ruby gem将文件提交到。 这是叉子! 归功于谁曾在美国从事宝石开发工作。...迄今为止,Moss的主要应用一直是在编程类中检测抄袭。 自1994年成立以来,Moss在这一角色上一直非常有效。 m

Global site tag (gtag.js) - Google Analytics