如何在VS2010中開發並部署Master Page相信不少人都比較熟悉了,但如何在我們的Site Definition中引入Master Page呢?也就是說,當你以此Site Definition來新創建一個Site時,此Site中的頁面就會基於你引入的Master Page來創建。這個問題有人作過償試,不少人失敗了,這里說說具體的操作步驟,希望對大家都有幫助。
因為內容較多,所以具體分成兩個大的步驟:
1、如何引入Master Page。
2、如何引入CSS等資源來影響Maste Page的外觀。
當然,上述操作都是在Site Definition中進行。
本篇就先說說第一個大部分:如何在Site Definition中引入Master Page.
首先打開VS2010,新建項目,選擇Site Definition項目模板,如下
默認選擇為Farm模式,確定后進入項目如下
系統已經為我們搭好了框架
接下來我們需要做的就是引入Master Page,由於Master Page是屬於File等類型的資源,所以我們需要以Module的方式引入,具體操作就是在項目上新建Item,在Item模板中選擇Module模板,如下:
確定后,項目變成如下樣子
一、關於Feature
系統為我們新創建了Feature,並將剛才建立的Module加入到Feature中,此處需要注意的有兩點:
1、這個Feature的Scope為Web,
這個設置將會與我們后面Onet.xml中的設置對應,即如果此處為Web,則需要在Ones.xml的Web節點內添加對此Feature的引用,而如果此處為Site,則需要在Onet.xml的Site節點處添加對此Feature的引用,稍后會對此再作說明:
2、獲取這個Feature的Id,此Id值將會在我們的Onet.xml中進行引用,Id值獲取如下:
二、關於Module
2.1創建MyCustom.master文件
本項目在Module中,系統為我們默認創建了MasterPageModule及其內容,其中包含一個Sample.txt,請把它重新命名為MyCustom.master,然后先清除里面的文本內容,再在MyCustom.master中復制如下代碼。
/Files/wsdj-ITtech/MyCustom.txt
請下載后,復制里面的內容到此處的MyCustom.master中。
當然,你也可以引入你自己的MasterPage的內容,這里只是為了實驗方便,你可以直接使用我上面給出的內容。然后在MasterPageModule中新建子目錄_catalog,並在此子目錄下再創建一子目錄masterpage,然后把MyCustom.master拖到此子目錄下,效果如下:
2.2 修改Elements.xml文件
創建好了我們的MasterPage內容后,我們需要進一步修改MasterPageModule下的Elements.xml文件,此文件原來內容如下:
< Elements xmlns ="http://schemas.microsoft.com/sharepoint/" >
< Module Name ="MasterPageModule" >
< File Path ="MasterPageModule\_catalogs\masterpage\MyCustom.master"
Url ="MasterPageModule/_catalogs/masterpage/MyCustom.master" />
</ Module >
</ Elements >
主要是定義我們的資源文件以及如何部署它。修改后的內容如下:
< Elements xmlns ="http://schemas.microsoft.com/sharepoint/" >
< Module Name ="MasterPageModule" Url ="_catalogs/masterpage" >
< File Path ="MasterPageModule\_catalogs\masterpage\MyCustom.master"
Url ="MyCustom.master"
Type ="GhostableInLibrary" >
< Property Name ="ContentType" Value ="$Resources:cmscore,contenttype_masterpage_name;" />
</ File >
</ Module >
</ Elements >
下面就其內容分別進行說明:
<Module Name="MasterPageModule" Url="_catalogs/masterpage"> 指明了我們這個Module的名字,以及它部署的位置。
本例,我們把它部署到你新創建的Site的Master Page Gallery中,你可以通過Site Actions-->Site Settings-->Galleries-->Master Pages中去找到它。
當然,現在去看還為時過早,要等到我們基於此Site Definition創建新的Site后再去查證。這里先提前給出示意圖:
這里容易出現的狀況就是有人在錄入Url值時寫成了這樣 Url="/_catalogs/masterpage" ,這樣表達的后果是把我們的MasterPage直接放置到了Site Collection的Root Web中,這種放置倒不能算錯,
但放到不同的位置自然有不同的影響。本處請先按本例的表達來放置。
<File >節點在此本有三個屬性,
Path屬性指明了這個File的位置,即指定相對於 %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\Features\功能 的文件的物理路徑,本例如下圖:
Url用於指定文件的虛擬路徑。如果指定了 Name 屬性(本例沒有指定File的Name屬性),則其值將用於該虛擬路徑。如果未指定 Path,則 Url 的值將用於物理路徑。
本例的Url沒有起到前述作用,我們只是在這里標記了File的文件名
Type用於指定是否在前端 Web 服務器上的內存中緩存該文件。可能的值包括 Ghostable 和 GhostableInLibrary。
這兩個值都可指定緩存該文件,但 GhostableInLibrary 指定將文件作為其基本類型為 DocumentLibrary 的列表的一部分進行緩存。
例如,發生更改時:
通過用戶界面對主頁進行更改,只有與原始頁面定義之間的差異被存入數據庫
而 default.aspx 則與架構文件一起被緩存在內存中。
顯示在瀏覽器中的 HTML 頁面通過由在內存中緩存的原始定義和數據庫中存儲的更改所生成的組合定義構建而成。
File元素的其它屬性詳細描述參考File元素
2.3 修改SiteDefinition相關文件
修改完了MasterPageModule下的Elements.xml,我們需要進一步修改SiteDefinition下的相關文件。
2.3.1、onet.xml文件
我們修改后的內容如下:
< Project Title ="MySiteDefinitionTest" Revision ="2" ListDir ="" xmlns:ows ="Microsoft SharePoint" xmlns ="http://schemas.microsoft.com/sharepoint/" >
< NavBars >
</ NavBars >
< Configurations >
< Configuration ID ="0" Name ="MySiteDefinitionTest"
CustomMasterUrl ="_catalogs/masterpage/MyCustom.master"
MasterUrl ="_catalogs/masterpage/MyCustom.master" >
< Lists />
< SiteFeatures >
</ SiteFeatures >
< WebFeatures >
< Feature ID ="cf62d018-a645-45b2-9b42-28925a4ac419" />
</ WebFeatures >
< Modules >
< Module Name ="DefaultBlank" />
</ Modules >
</ Configuration >
</ Configurations >
< Modules >
< Module Name ="DefaultBlank" Url ="" Path ="" >
< File Url ="default.aspx" >
</ File >
</ Module >
</ Modules >
</ Project >
Onet.xml文件里包括有Navigation areas, List Definitions, Modules, List Templates, Configurations, BaseTypes, Components,等等設置。
當Site Definition安裝時,一個全局的One.xml文件會被放置到%Program Files%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\GLOBAL\XML目錄下。而針對每一個不同的Site Definition又會有對應的Onet.xml文件放置到對應的子目錄(Template Name)下 %Program Files%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\SiteTemplates
全局 Onet.xml 文件定義適用於全局部署的隱藏列表的列表模板、列表基類型、默認定義配置和模塊
而子目錄中的每個 Onet.xml 文件都可以定義在對應的網站定義中使用的導航區域、列表模板、文檔模板、配置、模塊、組件和服務器電子郵件頁腳。
這里,我們只就本例使用到的Onet.xml部分進行說明:
首先是: <Configuration ID="0" Name="MySiteDefinitionTest"
CustomMasterUrl="_catalogs/masterpage/MyCustom.master"
MasterUrl="_catalogs/masterpage/MyCustom.master">
這里Configuration元素用於指定實例化網站定義配置或 Web 模板時默認創建的列表、模塊和功能.
ID 屬性用於標識配置,該屬性相對於 Configurations 元素中其他配置(如果有)而言是唯一的,本例直接使用0值以為標識
Name屬性則用於指明網站定義配置的名稱,本例使用了項目名MySiteDefinitionTest
CustomMasterUrl屬性:指定替換 .master 頁的 URL,該 .master 頁可用於通過網站定義配置創建的網站中的頁面(無需自定義這些頁面)。
MasterUrl屬性:指定用於通過網站定義配置創建的網站的默認母版頁。
換句話說:MasterUrl 用於變更System master page,而CustomMasterUrl用於變更site master page
本例將二者都指明為_catalogs/masterpage/MyCustom.master
關於Configuration的詳細說明參考Configuration說明
2.3.2、webtemp_MySiteDefinitionTest.xml文件
< Templates xmlns:ows ="Microsoft SharePoint" >
< Template Name ="MySiteDefinitionTest" ID ="10002" >
< Configuration ID ="0" Title ="MySiteDefinitionTest"
Hidden ="FALSE"
ImageUrl ="/_layouts/images/CPVW.gif"
Description ="MySiteDefinitionTest"
DisplayCategory ="SharePoint Customizations" >
</ Configuration >
</ Template >
</ Templates >
在WebTemp_DemoSiteDefs.xml文件里,根節點是Templates,里面放置的內容是我們在創建新Site時所陳列出來的備選項。
需要注意的是這里的Template Name必須和我們定義的Site Definition的名字完全一樣(本例是MySiteDefinitionTest)。
文件名以webtemp作為前綴也是Sharepoint的約定,用於系統在加載文件時知道這是WebTemplate文件。當Site Definition安裝時,WebTemp_DemoSiteDefs.xml 文件將會安裝到 %Program Files%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\LCID\XML目錄, LCID 是 language/culture的標識ID(例如:英語就是1033)
Template 元素可包含任意數目的 Configuration 子元素。每個這樣的子元素均表示一個網站定義配置。每個 Configuration 元素的 ID 屬性均對應於 Onet.xml 文件中另一 Configuration 元素的 ID。第二個 Configuration 元素指定網站定義配置的列表和模塊 (就是我們上面提到的Onet.xml中的Configuration定義)。
Configuration的Hidden 屬性設置為 TRUE,可在 UI 中隱藏該配置。
Configuration的 DisplayCategory 屬性指定 UI 中在其下顯示網站的網站類型的類別;例如,“Collaboration”(協作)和“Meetings”(會議)。
如果創建自定義網站定義配置,並為 DisplayCategory 指定以前未使用的值,則將在 UI 中顯示一個具有該名稱的新類別,以包含您的自定義網站定義配置。
Configuration的 SupportsMultilingualUI 屬性指示根據網站定義配置創建的網站是否可對不同的語言具有不同的 UI。
2.3.3、修改default.aspx
此頁面我們只修改它的默認的Master Page設置,此設置在頁面內容的頂部,找到
改成:
Build並部署,然后到Sharepoint網站,通過Site Action新建一個Site,在彈出的Site Gallery中可以找到我們創建的Site Defintion,請輸入新網站的相關設置
確定后直接跳到我們的新網站效果如下: