A rolling stone gathers no… MOSS 2007

30 April 2007

Using a custom master page in a site definition

Filed under: Master Pages, Site Definitions — Toby @ 6:33 pm

UPDATE

Don’t use the Sharepoint Solution Generator, so far we have not been able to upgrade the site definitions through a solution without it killing existing sites based on the site definition. 

I have seen many different ways of doing this, but I found the following method seemed to work for me, using the “SharePoint Extensions for Visual Studio 2005″ and the “SharePoint Solutions Generator

  • Use the “SharePoint Solution Generator” to create a site definition project.
  • Open the project and add your custom master page to the “Site Definition” folder

  • Open up “onet.xml”
  • Add the following node to the “ListTemplates” section

<ListTemplate Name=”mplibDisplayName=”$Resources:MasterPageGallery;Description=”$Resources:global_onet_mplib_desc;SetupPath=”global\lists\mplibType=”116BaseType=”1Path=”GLOBALHidden=”TRUEHiddenList=”TRUENoCrawl=”TRUEUnique=”TRUECatalog=”TRUEOnQuickLaunch=”FALSESecurityBits=”11AllowDeletion=”FALSEAllowEveryoneViewItems=”TRUEImage=”/_layouts/images/itdl.gifAlwaysIncludeContent=”TRUEDocumentTemplate=”100” />

  • Add the “MasterUrl” attribute to the “Configuration” node with a value of “_catalogs/masterpage/project.master”, where project.master is the name of your custom master page. This means all the pages using the “~masterurl/default.master” token will use the URL defined to point to your custom master page

<Configuration ID=”0Name=”DefaultMasterUrl=”_catalogs/masterpage/project.master“>

  • Add a “Module” node to the Modules section of the configuration called “MasterPage” that will reference the module definition in the “Modules” section of the onet file

<Module Name=”MasterPage” />

  • Add a module definition to the “Modules” section of the onet file. This will copy the custom master page file into the master page library when the site is provisioned.

<Module Name=”MasterPageList=”116Url=”_catalogs/masterpageRootWebOnly=”FALSE“>

<File Url=”project.masterType=”GhostableInLibraryIgnoreIfAlreadyExists=”TRUE” />

</Module>

  • Save the onet file and then deploy the project into your environment using the deploy option in “SharePoint Extensions for VS 2005″
  • When you create a new site from your site definition it should now use your new master page.

Below is a screen grab of the onet.xml file with all the changes highlighted

 

4 Comments »

  1. hi,

    i want to add custom v3 webparts to the default.aspx page (i.e. home page) of every site definition. There are 3 configuration sections (defintions) for each of the 3 sub sites. I would like different webparts to be added to each of the default.aspx pages within the onet.xml file.

    I know that we can use the section of each configuration for that. but it does not seems to work for me.

    regards
    ram

    Comment by Ram — 12 December 2007 @ 1:36 pm

  2. Have a look at the ONET.XML file for the STS template. This uses the same concept you describe above. I think the thing you will need to remember is to name the default page differently for each one. Let us know if you have anymore questions

    Comment by Toby — 14 December 2007 @ 2:56 pm

  3. [...] a custom masterpage to my site definition. The steps I followed to do that are outlined here: http://statto1974.wordpress.com/2007/04/30/using-a-custom-master-page-in-a-site-definition/. Put your master file in the 12TEMPLATESiteTemplatesv2DefaultOrg (where v2DefaultOrg is [...]

    Pingback by Creating and deploying a custom site definition for MOSS 2007 | Empty Cache — 16 April 2008 @ 5:11 pm

  4. Yes… it works for the Default.aspx page. But custom master page is not applied to “Lists/Forms/AllItems.asp” or some other inside page.

    Any solition for that??

    Comment by ved — 21 July 2008 @ 2:37 pm


RSS feed for comments on this post. TrackBack URI

Leave a comment

Blog at WordPress.com.