在 SharePoint 中创建品牌化的我的网站





4.00/5 (5投票s)
本文介绍了如何在 SharePoint 中的“我的站点”上应用自定义品牌,以便在用户创建“我的站点”时,已将自定义品牌应用到该站点。
背景
很久以后,我又回到了 CodeProject。这次是关于 SharePoint。SharePoint 的一个巨大优势是协作,此功能的核心是“我的站点”。“我的站点”是用户的个人站点,可以在其中执行任何操作,从更新个人资料到搜索人员、将他们添加为同事、跟踪同事资料中的更改、撰写博客以及许多其他操作。但是,所有这些都以 SharePoint 的默认外观提供,并且必须真正熟悉 SharePoint 才能应用自己的外观。如果有人希望所有用户的“我的站点”都具有自定义品牌会怎样?继续吧....
引言
下面描述了如何确保 SharePoint 用户创建的“我的站点”将在站点上应用自定义母版页,还确保“我的站点”将包含一些具有指定 Web 部件的预定义页面。 您会很高兴地知道,所有这些都可以仅通过三个功能和几行代码来实现。
实施品牌化的“我的站点”
在进行实际实施之前,请先回顾一下什么是功能装订。
功能装订是一个将功能附加到网站模板的过程,以便可以使用某些预激活的功能创建网站。
所以我所做的是创建一个装订功能,该功能将以下功能与“我的站点”定义相关联。
- 发布功能及其所有先决条件功能(以便我可以部署自定义页面)
- 一个应用自定义母版页到“我的站点”的功能
- 一个部署带有 Web 部件的页面的功能
装订功能的 feature.xml
<?xml version="1.0" encoding="utf-8"?>
<Feature Id="F9AB6989-A3A8-4df2-8254-76987DD4FAA5" Title="SiteStaplerFeature"
Scope="Farm" Version="1.0.0.0"
Hidden="FALSE"
DefaultResourceFile="core"
xmlns="http://schemas.microsoft.com/sharepoint/"> <ElementManifests>
<ElementManifest Location="Elements.xml" />
</ElementManifests>
</Feature>
装订功能的 element.xml
<?xml version="1.0" encoding="utf-8"?>
<Elements Id="F52F9522-4086-4341-8B88-4368139C1E37"
xmlns="http://schemas.microsoft.com/sharepoint/" >
<FeatureSiteTemplateAssociation
Id="f6924d36-2fa8-4f0b-b16d-06b7250180fa"
TemplateName="SPSPERS#0"/>
<FeatureSiteTemplateAssociation
Id="6ED16B2A-209F-4531-BBCE-F7B3F0CB75A8"
TemplateName="SPSPERS#0"/>
<FeatureSiteTemplateAssociation
Id="06927A49-4124-4a91-BA61-DB0BD5155BF2"
TemplateName="SPSPERS#0"/>
</Elements>
FeatureSiteTemplateAssociation 是一个将功能与网站定义相关联的标签。这里 TemplateName="SPSPERS#0" 用作默认的“我的站点”模板。 现在,element.xml 文件中引用的功能 ID 如下
- 第一个 (ID 为
f6924d36-2fa8-4f0b-b16d-06b7250180fa
) 是发布基础结构功能的 ID,因为需要在站点上启用发布功能才能部署自定义页面。 - 第二个 (ID 为
6ED16B2A-209F-4531-BBCE-F7B3F0CB75A8
) 是一个自定义功能,用于将母版页与站点一起部署并设置默认母版页。 - 第三个 (ID 为
06927A49-4124-4a91-BA61-DB0BD5155BF2
) 是一个自定义功能,用于部署自定义页面。
“我的站点”母版页功能: 此功能包含一个自定义母版页,用于部署到“我的站点”,并且激活代码与一个功能相关联,该功能将母版页应用为站点的默认母版页。
mysite 母版页功能的 feature.xml
<?xml version="1.0" encoding="utf-8"?>
<Feature Id="6ED16B2A-209F-4531-BBCE-F7B3F0CB75A8" Title="MySiteMasterPage"
Scope="Site"
Version="1.0.0.0"
Hidden="FALSE"
DefaultResourceFile="core" xmlns="http://schemas.microsoft.com/sharepoint/"
ReceiverAssembly="MyAssembly.MyNameSpace, Version=1.0.0.0,
Culture=neutral, PublicKeyToken=282025704650b387"
ReceiverClass="MyAssembly.MyNameSpace.FeatureRecieverClass">
<ElementManifests>
<ElementManifest Location="MySiteMasterPage\Module.xml" />
<ElementFile Location="MySiteMasterPage\MySite.master" />
</ElementManifests>
</Feature>
母版页功能的 Module.xml
<?xml version="1.0" encoding="utf-8"?>
<Elements Id="D8669972-4B6C-49b2-9A34-430DD5C296F6"
xmlns="http://schemas.microsoft.com/sharepoint/">
<Module Name="MySiteMasterPage" List="116" Url="_catalogs/masterpage">
<File Path="MySiteMasterPage\MySite.master" Url="MySite.master"
Type="GhostableInLibrary" />
</Module>
</Elements>
母版页功能激活代码
public override void Featureactivating(SPFeatureReceiverProperties properties)
{
SPSite site = (SPSite)properties.Feature.parent;
SPWeb web = site.OpenWeb("");
web.CustomMasterUrl = "/_catalogs/masterpage/MySite.master";web.Update();
}
现在,用于在“我的站点”上部署带有自定义 Web 部件的页面的第三个功能是
mysitepages 功能的 Feature.xml
<Feature xmlns=http://schemas.microsoft.com/sharepoint/
Id="06927A49-4124-4a91-BA61-DB0BD5155BF2"
Scope="Web"
Hidden="False"
Title="MySitePages"
Description="Deploys a custom page with some web parts.">
<ElementManifests>
<ElementManifest Location="MySitePages/elements.xml" />
</ElementManifests>
<ActivationDependencies>
<ActivationDependency FeatureId="22A9EF51-737B-4ff2-9346-694633FE4416" />
<ActivationDependency FeatureId="A392DA98-270B-4e85-9769-04C0FDE267AA" />
<ActivationDependency FeatureId="AEBC918D-B20F-4a11-A1DB-9ED84D79C87E" />
<ActivationDependency FeatureId="89E0306D-453B-4ec5-8D68-42067CDBF98E" />
<ActivationDependency FeatureId="D3F51BE2-38A8-4e44-BA84-940D35BE1566" />
</ActivationDependencies>
</Feature>
标签 <ActivationDependencies>
中的功能是 SharePoint 的隐藏功能,需要激活才能激活发布功能。因此,您可以像在您的功能中一样使用此标签。
mysite 页面功能的 Element.xml
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<Module Name="Pages" List="850" Url="Pages">
<File Name="SearchResult.aspx" Url="SearchResult.aspx"
Type="GhostableInLibrary" IgnoreIfAlreadyExists="TRUE" >
<AllUsersWebPart WebPartZoneID="Header" WebPartOrder="1">
<![CDATA[
<webParts>
<webPart xmlns="http://schemas.microsoft.com/WebPart/v3"> <metaData>
<type name="Microsoft.Office.Server.Search.WebControls.PeopleCoreResultsWebPart,
Microsoft.Office.Server.Search, Version=12.0.0.0, Culture=neutral,
PublicKeyToken=71e9bce111e9429c" />
<importErrorMessage>Cannot import this Web Part.</importErrorMessage>
</metaData>
<data>
<properties>
<property name="CacheXslStorage" type="bool">True</property>
<property name="Default" type="string" />
<property name="ChromeState" type="chromestate">Normal</property>
..............other properties..................
</properties>
</data>
</webPart>
</webParts>
]]>
</AllUsersWebPart>
</File>
</Module></Elements>
名称为 SearchResult.aspx 的页面应存在于此功能文件夹中,并且具有 Web 部件区域 ID "header
"。 我在这里使用了人员核心搜索结果 Web 部件的 Web 部件 XML。 如果您想在页面上使用自定义 Web 部件,只需导出该 Web 部件并将 Web 部件 XML 粘贴到 AllUsersWebPart
标签中。
关注点
我在实现此需求时真正喜欢的一点是,我无需编写数千行代码。 这完全是关于激活功能,并且只需 10 行代码即可在站点上应用母版页。
结论
在这里,我描述了为所有用户创建品牌化的“我的站点”所需的一切。 我们讨论了功能装订、发布功能、在站点上应用母版页以及部署带有 Web 部件的页面。 我试图尽可能简化事情。 如果有人有任何问题,我将非常乐意回答。 我也会尽快尝试上传功能和代码文件。
历史
- 2009 年 9 月 8 日:初始发布