The scenario goes, you have a SharePoint 2010 Publishing site and you have created a custom master page that is set as the “Custom” master page for the site. Now all of your pages will use this assigned custom master page as expected. But let’s say that you create a new custom page layout that only special pages will use, and this page layout should use yet a different master page. You go ahead and update the Page directive on the Page Layout by adding something similar to:
But after saving, checking in and publishing, you find that the pages using this page layout still use the site’s custom master page, not the assigned master page for this particular page layout. Why?
Well this is because Page Layout pages inherit from
and this class does not allow you to modify the masterpagefile property in the Page Layout. The PublishingLayoutPage class automatically sets the master page to the site’s custom master page during OnPreInit!
Microsoft’s class definition for the PublichingLayoutPage can be found here, be sure to review the Remarks as well.
What is your workaround? Well unfortunately you need to create your own custom class that will inherit from the PublishingLayoutPage class, and then override the CustomMasterUrl property with the master page you would like this custom PublishingLayoutPage class to use. This isn’t too difficult to do, although you would need to have some coding experience and Visual Studio 2010.
Do you need help creating this custom class? No problem, a great blog article was written for MOSS / SharePoint 2007 that you may find helpful. The process to create this custom class is almost exactly the same in 2007 and 2010.
There is another potential work around that I will discuss in another post. The next post is on the difference between the PublishingLayoutPage class and the WebPartPage class, and how they can be used to create a “custom” page layout that allows for a custom master page applied to only a particular set of page layouts.